轉(zhuǎn):http://marshal-r./blog/2089963 一,、介紹
DES算法全稱Data Encryption Standard,,即數(shù)據(jù)加密標準,是一種對稱加密算法,。也許你更早接觸到的是RSA算法——非對稱加密算法的代表,,它的一個典型應用是在ssh無密碼登錄中生成一對公鑰、私鑰,。但是,,RSA算法有一個致命缺點:處理速度很慢,因此只適合加密安全性要求極高而又較短的信息,。相比之下,,DES處理速度則快多了,,可用于加密信息比較長的場合。 而且,,通過定期在通信網(wǎng)絡的源端和目的端同時改用新的Key,,便能更進一步提高數(shù)據(jù)的保密性,這也正是現(xiàn)在金融交易網(wǎng)絡的流行做法,。目前,,DES算法在POS、ATM,、磁卡及智能卡(IC卡),、加油站、高速公路收費站等領(lǐng)域被廣泛應用,,以此來實現(xiàn)關(guān)鍵數(shù)據(jù)的保密,,如信用卡持卡人的PIN的加密傳輸,IC卡與POS間的雙向認證,、金融交易數(shù)據(jù)包的MAC校驗等,,均用到DES算法。
DES算法的入口參數(shù)有三個:Key,、Data,、Mode。其中Key為8個字節(jié)共64位,,是DES算法的工作密鑰;Data也為8個字節(jié)64位,,是要被加密或被解密的數(shù)據(jù),;Mode為DES的工作方式,有兩種:加密或解密,。DES算法把64位的明文輸入塊轉(zhuǎn)變?yōu)?4位的密文輸出塊,,它所使用的密鑰也是64位。
二,、DES加密原理圖
DES加密過程總覽 子密鑰生成過程
DES加密過程 三,、DES加密詳解
1、獲取子密鑰Ki(一共16個) DES的初始密鑰K為64位,,按8行8列從左往右從上往下排列,,其中每行第8位用于奇偶校驗,因此Key實際可用位數(shù)為56,。 首先,,64位的初始密鑰K經(jīng)過PC-1之后,生成56位的串,。
由表可知,,初始密鑰K第8,、16、24,、32,、40、48,、56,、64共8個校驗位被去掉,剩余56位按表所示方式排列:第57位放在第1位,,第49位放在第2位,,依次類推。
經(jīng)過PC-1置換之后,,將置換輸出再分為前28位C0和后28位D0兩部分,,分別循環(huán)左移1位得到C1和D1,然后將兩部分合并成56位,,然后經(jīng)過PC-2變換之后生成48位的子密鑰K1,。
至此,,加密過程需要的16個子密鑰全部生成完畢,,下面我們來看具體如何加密。
2,、加密過程 2.1 初始置換 64位明文串經(jīng)過一個初始置換函數(shù)IP,,生成重新排列之后的64位輸出,分為左32位L0和右32位R0,,用于F函數(shù)16輪迭代運算的首次迭代的初始輸入,。
2.2 迭代運算 R0與子密鑰K1經(jīng)過密碼函數(shù)變換F(R0,K1)得到32位輸出f1,f1與L0做二進制異或運算,,結(jié)果賦給R1,,R0則原封不動地賦給L1。然后R1與子密鑰K2經(jīng)過函數(shù)變換F(R1,K2)得到32位輸出f2,,f2與L1做二進制異或運算,,結(jié)果賦給R2,R1則原封不動地賦給L2....依此類推,一共經(jīng)過16次迭代運算直至最后生成L16和R16,。
2.3 末置換 L16,、R16合在一起64位,經(jīng)過末置換函數(shù)IP-1,,得到64位密文輸出,。
3、密碼函數(shù)F 密碼函數(shù)F接受兩個輸入:32位數(shù)據(jù)和48位子密鑰,,輸出結(jié)果為32位,。具體運算如下: 3.1 擴展置換 32位數(shù)據(jù)通過擴展置換E從32位擴展為48位,擴展置換通過將原32位數(shù)據(jù)中的某些位重復出現(xiàn)達到擴展的目的,。
3.2 異或運算 擴展置換的輸出(48位)與子密鑰(48位)做異或運算,,輸出為48位。
3.3 S盒置換 將異或運算得到的48位結(jié)果數(shù)據(jù)分成8個6位的塊,,每塊通過對應的一個S盒產(chǎn)生一個4位的輸出,。8個6位數(shù)據(jù)的置換結(jié)果連在一起,形成32位輸出結(jié)果,。 每個S盒實際上是一張4(0-3)行16(0-15)列的置換表,,注意,行列編號都從0開始,。
S盒接收6位的數(shù)據(jù),,經(jīng)過置換輸出4位的數(shù)據(jù),其具體置換過程為:將6位數(shù)據(jù)的第1位和第6位取出來,,形成一個2位的二進制數(shù)x(從0-3),,剩下的4位構(gòu)成另一個二進制數(shù)y(從0-15),然后查出S盒x行y列對應的十進制整數(shù),,將該整數(shù)轉(zhuǎn)換為一個4位二進制數(shù),,即為S盒的輸出。 3.4 P盒置換 S盒置換的最終結(jié)果32位數(shù)據(jù)通過P盒置換,,同樣生成32位輸出結(jié)果。
參考文獻:http://baike.baidu.com/view/584868.htm?fr=aladdin http://simplesource.blog.163.com/blog/static/103414062007221112947879/ |
|