C 實現DES加密

2021-10-24 15:21:50 字數 2025 閱讀 4845

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裡面了 更新修復...