S-DES加密與解密

S-DES加密解密流程圖:算法

 

 

S-DES是DES算法的簡化版,並無什麼實際使用的價值,只用於教學來理解DES算法的加密方法,這篇文章就是按照S-DES的算法來實際加密和解密的一段2進制數,演示了加密的運算過程.加密

下面從準備知識開始:spa

1)先講一下置換,舉例說明,對」ABCDEFGH」作一下」82641753″置換的結果就是」HBFDAGEC」,這樣就能看懂是怎麼置換的了吧.blog

2)而後是循環移位,繼續舉例,」ABCDEFGH」循環左移2位結果就是」CDEFGHAB」.擴展

3)還有個S盒的替代選擇,具體到S-DES來講就是輸入的四位數」ABCD」在S盒中找第AD行BC列的數字做爲輸出,好比0101輸入S0(見下)的話就是第1(01)行第2(10)列(0-3行,0-3列),輸出爲1即01,再好比1001輸入S0的話就是第3(11)行第0(00)列,輸出爲3即11.循環

4)最後是按位異或,舉例的話1^1=0,1^0=1,0^1=1,0^0=0,1100^1010=0110,其實這個你們都懂吧.加密解密

好了,準備知識就這麼多,下面開始正題:密碼

S-DES算法的輸入是一個8位的明文或者密文組和一個10位的密鑰,輸出是一個8位的密文或者明文組。 方法

如下是S-DES所需的幾個置換表:im

P10 {3,5,2,7,4,10,1,9,8,6}

P8 {6,3,7,4,8,5,10,9} 注意這個置換選擇輸入10位輸出8位

P4 {2,4,3,1}

IP {2,6,3,1,4,8,5,7}

IPI {4,1,3,5,7,2,8,6}

EP {4,1,2,3,2,3,4,1} 注意這個是擴展置換,輸入4位輸出8位

如下是兩個S盒

S0:
{1,0,3,2},
{3,2,1,0},
{0,2,1,3},
{3,1,3,2},

S1:
{0,1,2,3},
{2,0,1,3},
{3,0,1,0},
{2,1,0,3},

 

接下來就是加密和解密算法

密鑰

首先講子密鑰的生成,子密鑰在加密和解密算法中都有使用.

10位密鑰 key = 01111 11101

對key作P10置換獲得 11111 10011  (3,5,2,7,4,10,1,9,8,6)

記左半(高位)的爲Lk=11111,右半(低位)爲Rk=10011

Lk和Rk均循環左移1位,獲得Lk=11111,Rk=00111

對Lk和Rk組合獲得的11111 00111作P8置換選擇,獲得子密鑰K1=0101 1111(6,3,7,4,8,5,10,9)

Lk和Rk均再次循環左移2位,獲得Lk=11111,Rk=11100

對Lk和Rk組合獲得的11111 11100作P8置換選擇,的到子密鑰K2=1111 1100(6,3,7,4,8,5,10,9)

以上,經過密鑰獲得了算法所需的子密鑰.

 

加密

首先是初始置換

對明文m=0001 0110作IP置換(2,6,3,1,4,8,5,7),得m’=0100 1001

接下來是標準的Feistel密碼結構,共有兩次循環

第一次循環

記左半(高位)爲Lm=0100,右半(低位)爲Rm=1001

對Rm作EP擴展(4,1,2,3,2,3,4,1)置換,得Rm’=1100 0011

Rm’與子密鑰K1按位異或,得Rm’=1001 1100

Rm’左半1001進入S0盒替代選擇得11,右半1100進入S1盒替代選擇的01,組合後得Rm’=1101

對Rm’作P4(2,4,3,1)置換,得Rm’=1101

Rm’與Lm按位異或,得Lm’=1001

Lm’與Rm(最開始的那個Rm)組合獲得輸出 1001(Lm’) 1001(Rm)

至此完成第一次循環

而後交換高低位,做爲第二次循環的輸入,即1001(Rm) 1001(Lm’)做爲輸入

開始第二次循環

記左半爲Ln=1001,右半爲Rn=1001

對Rn作EP擴展置換(4,1,2,3,2,3,4,1),得Rn’=1100 0011

Rn’與子密鑰K2按位異或,得Rn’=0011 1111

Rn’左半0011進入S0盒替代選擇得10,右半1111進入S1盒替代選擇的11,組合後得Rn’=1011

對Rn’作P4置換(2,4,3,1),得Rn’=0111

Rn’與Ln按位異或,得Ln’=1110

Ln’與Rn(最開始的那個Rn)組合獲得輸出 1110(Ln’) 1001(Rn)

至此完成第二次循環

最後進行逆初始置換對上面的輸出m’=1110 1001作IPI(4,1,3,5,7,2,8,6)置換獲得密文m’=0111 0110

 

OK,到這裏就完成了將明文加密爲密文,S-DES加密結束.

 

解密

下面開始解密,解密過程與加密基本一致,就是密鑰使用順序是相反的,第一次循環使用K2第二次循環使用K1

首先仍是初始置換

對密文m=0111 0110作IP置換,得m’=1110 1001

Feistel密碼結構

第一次循環

記左半(高位)爲Lm=1110,右半(低位)爲Rm=1001

對Rm作EP擴展置換,得Rm’=1100 0011

Rm’與子密鑰K2按位異或,得Rm’=0011 1111

Rm’左半0011進入S0盒替代選擇得10,右半1111進入S1盒替代選擇的11,組合後得Rm’=1011

對Rm’作P4置換,得Rm’=0111

Rm’與Lm按位異或,得Lm’=1001

Lm’與Rm(最開始的那個Rm)組合獲得輸出 1001(Lm’) 1001(Rm)

至此完成第一次循環

而後交換高低位,做爲第二次循環的輸入,即1001(Rm) 1001(Lm’)做爲輸入

開始第二次循環

記左半爲Ln=1001,右半爲Rn=1001

對Rn作EP擴展置換,得Rn’=1100 0011

Rn’與子密鑰K1按位異或,得Rn’=1001 1100

Rn’左半1001進入S0盒替代選擇得11,右半1100進入S1盒替代選擇的01,組合後得Rn’=1101

對Rn’作P4置換,得Rn’=1101

Rn’與Ln按位異或,得Ln’=0100

Ln’與Rn(最開始的那個Rn)組合獲得輸出0100(Ln’) 1001(Rn)

至此完成第二次循環

最後進行逆初始置換

對上面的輸出m’=0100 1001作IPI置換獲得明文m’=0001 0110

 

這樣就完成的S-DES的解密

相關文章
相關標籤/搜索