【密碼學】DES算法和AES算法(Rijndael算法)數學原理及實現html
DES,Data Encryption Standard, 數據加密標準。算法
儘管DES是一個很寬泛的名字,可是它指代的只是一個具體的標準。它在1970年代被美國NBS接受爲信息處理的標準。安全
與之對應,DES的加解密算法稱爲DEA算法,它採用了56-bit的密鑰和塊加密方式。具體的實現中,考慮到塊加密的問題,如區塊類似性,要使用DES的變種。經常使用DES有最先出現的工做模式,ECB,CBC,OFB和CFB,能夠追溯到1981年。性能
AES和DES同樣也是一個標準,可是稱爲高級加密標準,聽起來也很寬泛。這兩個加密標準在歷史上確實是DES先於AES, 並且同屬於塊加密,因此它們均可以用塊加密的四種工做模式。它們都是對稱加密,等等。儘管AES不具有RSA這種加密方法的特殊優勢,可是它確實地受到了一種特殊的待遇,這多是由於密碼學家確實在篩選它的過程當中發現了它良好的防止攻擊的性能,而這要追究到密碼學中不少複雜的理論。加密
講清楚DES和AES的數學原理並不容易。spa
事實上關於AES的數學原理,有一本書The Design of Rijndael:AES - The Advanced Encryption Standard.正是用來闡釋它的原理的。.net
AES算法的設計策略是WTS。WTS 是針對差分分析和線性分析提出的,可對抗差分密碼分析和線性密碼分析。設計
AES和DES的策略無外乎置換和代換,可是在這些變換中的混淆,擴散,抗性分析都是通過精心設計的。因爲不可能在一篇文章中作這些分析,而且即便作了也不表明就懂了,並且在實際應用中沒有太大的必要,因此在文章中沒有分析。有興趣的能夠看上面提到的原理書。這裏僅列舉二者的一些小區別。3d
|
DEScode |
AES |
加密單位長度 |
8字節 |
16字節 |
密鑰長度 |
56bit |
密鑰長度爲128/192/256比特,實際中至少要跟DES的變種3DES的安全性同樣。 |
可否對抗差分和線性密碼分析 |
不能 |
能 |
DES加密流程
![]()
|
電子密碼本(Electronic codebook,ECB),模式直接分塊加密 |
![]()
|
密碼塊連接(CBC),在CBC模式中,每一個明文塊先與前一個密文塊進行異或後,再進行加密。 |
![]()
|
密文反饋(Cipher feedback, CFB),前一輪的密文加密再異或明文,獲得密文。 |
![]()
|
輸出反饋模式(Output feedback, OFB)能夠將塊密碼變成同步的流密碼。它產生密鑰流的塊,而後將其與明文塊進行異或,獲得密文。 |
四種加密工做模式 [2]
CBC, CFB, OFB在每輪中都有加密,異或,只是順序和參與的數據不同。爲何會產生這幾種變型,在原理上來講並無太大的緣由,只是爲了增長破解的難度。
AES 加解密過程[3]
1.字節代替
用S盒進行字節的置換
2.行移位
行移位是一個4x4的矩陣內部字節之間的置換,用於提供算法的擴散性。
3.列混淆
利用GF(28)域上算術特性的一個代替,一樣用於提供算法的擴散性。有限域乘法操做,在運行中須要消耗較多的時間。如今的計算平臺都擁有豐富的軟件資源(RAM、Flash等),所以AES的軟件實現通常都會採用查表的方式,將字節替代、行移位、列混淆合在一塊兒查表,大概消耗8-10K字節的存儲空間,但效率很是之高。
4. 輪密鑰加
[1] https://www.garykessler.net/library/crypto.html
[2] https://zh.wikipedia.org/wiki/%E5%88%86%E7%BB%84%E5%AF%86%E7%A0%81%E5%B7%A5%E4%BD%9C%E6%A8%A1%E5%BC%8F
[3] boxbox, 密碼算法詳解——AES, http://www.cnblogs.com/luop/p/4334160.html#3674719