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...