DES的CBC演算法加解密演示

2021-10-19 13:25:53 字數 3266 閱讀 1491

v#include 

#include

using

namespace std;

//交易資料

struct slip

;//a=>b 10000

char to[16]

=;//篡改為 b=>a 10000

long

long amount =0;

};static const_des_cblock key =

"1234567"

;static des_key_schedule key_sch;

void

enslip

(const slip& s,

unsigned

char

* out,

int&out_size)

//補充資料。。。

}void

deslip

(const

unsigned

char

* in,

int size, slip& s)

}void

attackslip

(unsigned

char

* out)

;//from

memcpy

(tmp, out,16)

;//to copy from

memcpy

(out, out +16,

16);memcpy

(out +

16, tmp,16)

;}void

enslipcbc

(const slip& s,

unsigned

char

* out,

int& out_size)

;// 初始化向量

out_size = size;

//資料如果不是8的倍數,會補0

if(size %8!=

0)des_cbc_encrypt

( p,

//輸入

o,//輸出

sizeof

(s),

//輸入資料的大小

&key_sch,

//秘鑰

&iv,

//初始化向量 des_cbc_encrypt 呼叫後值不變

//des_ncbc_encrypt 儲存上次的值

des_encrypt //加密);

}void

deslipcbc

(const

unsigned

char

* in,

int size, slip& s)

;// 初始化向量

des_set_key

(&key,

&key_sch)

;//如果補0了 解密後無法知道實際大小,需要使用者儲存原資料大小

des_cbc_encrypt

(in,

(unsigned

char*)

&s, size,

&key_sch,

&iv, des_decrypt);}

intmain

(int argc,

char

* ar**)

;int out_size =0;

slip s1 =

; cout <<

"s1 from:"

<< s1.from << endl;

cout <<

"s1 to:"

<< s1.to << endl;

cout <<

"s1 amount:"

<< s1.amount << endl;

enslip

(s1, out, out_size)

; cout <<

"en:"

<< out_size<<

"|"<< out << endl;

//攻擊密文

attackslip

(out)

; slip s2;

deslip

(out, out_size, s2)

; cout <<

"s2 from:"

<< s2.from << endl;

cout <<

"s2 to:"

<< s2.to << endl;

cout <<

"s2 amount:"

<< s2.amount << endl;

slip s3;

enslipcbc

(s1, out, out_size)

;//攻擊密文

attackslip

(out)

;deslipcbc

(out, out_size, s3)

; cout <<

"s3 from:"

<< s3.from << endl;

cout <<

"s3 to:"

<< s3.to << endl;

cout <<

"s3 amount:"

<< s3.amount << endl;

}unsigned

char data=

"1234567"

;unsigned

char out[

1024]=

;unsigned

char out2[

1024]=

;//1設定秘鑰

des_set_key

(&key,

&key_sch)

;//資料加密 8位元組

des_ecb_encrypt

((const_des_cblock*

)data,

(des_cblock*

)out,

&key_sch, des_encrypt)

; cout << out << endl;

//資料解密

des_ecb_encrypt

((const_des_cblock*

)out,

(des_cblock*

)out2,

&key_sch, des_decrypt)

; cout << out2 << endl;

getchar()

;return0;

}

DES加解密原理

des演算法是典型的分組密碼,加密前先將明文編碼表示後的二進位制序列劃分成長度為64b的分組,des演算法的金鑰也是長度為64b的二進位制序列,金鑰中第8 16 24 32 40 48 56 64位為奇偶校驗位。des演算法的基本步驟 1 初始置換ip 2 16輪迭代處理 3 互換左 右32位 4 ...

DES可逆加解密

方法 des預設金鑰向量 private static byte keys des加密字串 待加密的字串 加密金鑰,要求為8位 加密成功返回加密後的字串,失敗返回源串 public static string encryptdes string encryptstring,string encryp...

iOS使用DES加解密

這裡使用框架提供的des加解密庫 首先引入標頭檔案 import 主要的加解密函式如下 字串加密 引數 plaintext 加密明文 key 金鑰 64位 nsstring encryptusedes nsstring plaintext key nsstring key size t numbyt...