1.定義金鑰變數key
2.定義子金鑰儲存變數subkey
3.將pc_1,pc_2,ip,ip_1,e盒和s盒,p,加密輪資料新建陣列變數儲存
4.定義chartobitset方法進行字串到二進位制數的轉換
5.定義exec函式對資料進行進行擴充套件置換,異或,查s盒置換,p置換的初始操作
6.定義leftshift函式進行左移操作
7.定義madekey函式進行子金鑰生成
8.定義encrypto函式進行ip置換,迭代加密並輸出加密結果
#include
#include
#include
#include
#include
#include
using
namespace std;
bitset<
64> key;
bitset<
48> subkey[16]
;int pc_1=
;int pc_2=
;int ip=
;int ip_1=
;int e_box=
;int s_box[8]
[4][
16]=,
,,},
,,,}
,,,,
},,,
,},,
,,},
,,,}
,,,,
},,,
,}};
int p=
;int shiftbits=
;bitset<
64>
chartobitset
(const
char s[8]
)//二進位制轉換
bitset<
32>
exec
(bitset<
32>r, bitset<
48>k)
//加密過程實現
for(
int i =
0; i <
48; i = i +6)
bitset<
32> buff = res;
for(
int i =
0; i <32;
++i)
return res;
}bitset<
28>
leftshift
(bitset<
28>k,
int shift)
else
}return k;
}//int execkey()
intmadekey()
return0;
}bitset<
64>
encrypto
(bitset<
64>
& m)
for(
int i =
32; i <64;
++i)
//li
left[i -32]
= currentbits[i]
;for
(int i =
0; i <32;
++i)
//ri
right[i]
= currentbits[i]
;for
(int round =
0; round <16;
++round)
// 16輪加密
/*合併l16和r16*/
for(
int i =
0; i <32;
++i)
for(
int i =
32; i <64;
++i)
//置換ip-1
currentbits = cipher;
for(
int i =
0; i <64;
++i)
return cipher;
}int
main()
DES加密實現(c語言)
好了,廢話不多說了,見 吧 ps.命名不是很規範,大家將就下 include 各種函式定義 int move num int r void xor int r b,int k3,int large void s box int r t 32 int r b 48 void erzhuanshiliu...
C 實現DES對稱加密法
入口引數有三個 key data mode。key為加密解密使用的金鑰,data為加密解密的資料,mode為其工作模式。當模式為加密模式時,明文按照64位進行分組,形成明文組,key用於對資料加密,當模式為解密模式時,key用於對資料解密。實際運用中,金鑰只用到了64位中的56位,這樣才具有高的安全...
C 實現DES加密 演算法
我的第一篇部落格就是 c語言實現des加密 今天重寫的時候發現好像 傳錯了,有些尷尬,其中有各種奇怪的問題 問題1.好多表,包括s盒之類的寫成char型別了,應該寫int型別才對 問題2.好多變數沒宣告就用了 問題3.為啥我當時要寫這麼多static?問題4.沒標頭檔案,全擠在cpp裡面了 更新修復...