裴宏韜 孫建言 蓋紅玉 李穩(wěn)
摘要:對稱密碼算法是當今應用范圍最廣,使用頻率最高的加密算法。它不僅應用于軟件行業(yè),在硬件行業(yè)同樣流行。各種基礎(chǔ)設施凡是涉及安全需求,都會優(yōu)先考慮對稱加密算法。
關(guān)鍵詞:對稱加密算法;DES;3DES;AES
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2017)18-0046-02
1概述
隨著數(shù)據(jù)加密技術(shù)的發(fā)展,現(xiàn)代密碼技術(shù)主要分為對稱加密技術(shù)和非對稱加密技術(shù)。如果在一個密碼體系中,加密密鑰和解密密鑰相同,就稱為對稱密鑰?,F(xiàn)代加密技術(shù)階段,加密和解密算法是公開的,數(shù)據(jù)的安全性完全取決于密鑰的安全性,因此,對稱加密體系中如果密鑰丟失,數(shù)據(jù)將不再安全。
2對稱式加密算法簡述
2.1代表性算法
1)DES
DES(Data EncryptionStandard,數(shù)據(jù)加密標準)是美國國家標準局研究的除國防部以外的其他部門的計算機系統(tǒng)的數(shù)據(jù)加密標準。DES是一種單密鑰密碼算法,它是一種典型的按分組方式工作的密碼,是兩種基本密碼塊替代和換位的細致而復雜的結(jié)構(gòu),通過反復一次應用這兩項技術(shù)來提高起強度,經(jīng)過總共16輪的替換和換位變換后,使得密碼分析者無法獲得該算法的一般特性以外的更多的信息。
算法思想:DES算法將輸入的明文分為64位的數(shù)據(jù)分組,使用64位密鑰進行變化,每個64為明文分組數(shù)據(jù)經(jīng)過初始置換、16次迭代和逆初始置換的3個主要階段,最后輸出得到64為密文。
2)三重DES
DES算法現(xiàn)在難以提供足夠的安全性,因其有效密鑰只有56位。后來又提出了三重DES(或稱3DES),該方法的強度大約和112比特的密鑰強度相當。這種方法用兩個密鑰對明文進行3次運算。
3)AES
高級加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯(lián)邦政府采用的一種區(qū)塊加密標準。這個標準用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。AES匯聚了高安全性、高性能、高效率、易用和靈活等優(yōu)點,它設計思想簡單,并兼顧了速度和代碼大小以適應各種平臺的需求。AES設計有三種密鑰長度,相比較而言,AES的128位密鑰比DES的58位密鑰要強得多。
2.2算法比較
對稱密碼算法的加密密鑰和解密密鑰相同,對于大多數(shù)對稱密碼算法,加解密過程互逆。
1)加解密通信模型,如圖1所示。
2)特點:算法公開、計算量小、加密速度快、加密效率高。
3)弱點:雙方都使用同樣密鑰,安全性得不到保證。
對稱密碼有流密碼和分組密碼兩種,但是現(xiàn)在普遍使用的是分組密碼:
4)分組密碼工作模式
(1)ECB:電子密碼本(最常用的,每次加密均產(chǎn)生獨立的密文分組,并且對其他的密文分組不會產(chǎn)生影響,也就是相同的明文加密后產(chǎn)生相同的密文)。
(2)CBC:密文鏈接(常用的,明文加密前需要先和前面的密文進行異或運算,也就是相同的明文加密后產(chǎn)生不同的密文)。
除了這兩種常用的工作模式,還有:
(3)CFB:密文反饋。
(4)OFB:輸出反饋。
f5)CTR:計數(shù)器。
這五種工作模式主要是密碼學中算法在進行推導演算的時候所應用到的。
5)分組密碼填充方式
(1)NoPadding:無填充。
(2)PKCS5Padding:填充的原則是,如果長度少于16個字節(jié),需要補滿16個字節(jié),補(16-len)個(16-len)例如:huguozhen這個節(jié)符串是9個字節(jié),16-9=7,補滿后如:huguozhen+7個十進制的7。如果字符串長度正好是16字節(jié),則需要再補16個字節(jié)的十進制的16。在PKCS5Padding中,明確定義Block的大小是8位。
(3)ISO10126Padding。
三種常用的對稱密碼的填充方式如表1所示。
3算法的Java實現(xiàn)
3.1 DES算法
(1)生成密鑰:
KeyGenerator keyGen=KeyGenerator.getlnstance("DES");∥密鑰生成器
keyGen.init(56);∥初始化密鑰生成器
SecretKey secretKey=keyGen.generateKey0;∥生成密鑰
byte[]key=secretKey.getEncoded();∥密鑰字節(jié)數(shù)組
f21DES加密:
SecretKey secretKey=new SecretKeySpec(key,"DES");∥恢復密鑰
Cipher cipher=Cipher.getInstance("DES");∥Cipher完成加密或解密工作類
cipher.init(Cipher.ENCRYPT_MODE,secretKey);∥對Cipher初始化,加密模式
bytel[]cipherByte=cipher.doFinal(data);∥加密data
(3)DES解密:
SecretKey secretKey=new SecretKeySpec(key,"DES");∥恢復密鑰
Cipher cipher=Cipher.getlnstance("DES");HCipher完成加密或解密工作類
cipher.init(Cipher.DECRYPT_MODE,secretKey);∥對 Cipher初始化,解密模式
byte[]cipherByte=cipher.doFinal(data);∥解密data
3.2 AlES算法實現(xiàn)
AES算法是高級數(shù)據(jù)加密標準,能夠有效抵御已知的針對DES算法的所有攻擊。密鑰建立時間短、靈敏性好、內(nèi)存需求低、安全性高。推薦使用。
1)生成密鑰:
KeyGenerator keyGen=KeyGenerator.getInstance("AES");∥密鑰生成器
keygen.init(128);∥默認128,獲得無政策權(quán)限后可為192或256
SecretKey secretKey=keyGen.generateKey();∥生成密鑰
byte[]key=secretKey.getEncoded0();∥密鑰字節(jié)數(shù)組
2)AES加密:
SecretKey secretKey=new SecretKeySpec(key,"AES");∥恢復密鑰
Cipher cipher=Cipher.getlnstance("AES");∥Cipher完成加密或解密工作類
cipher.init(Cipher.ENCRYPT_MODE,secretKey);∥對Cipher初始化,解密模式
byte[]cipherByte=cipher.doFinal(data);∥加密data
3)AES解密:
SecretKey secretKey=new SecretKeySpec(key,"AES");∥恢復密鑰
Cipher cipher=Cipher.getInstance("AES");∥Cipher完成加密或解密工作類
cipher.init(Cipher.DECRYPT_MODE,secretKey);∥對 Cipher初始化,解密模式
byte[]cipherByte=cipher.doFinal(data);∥解密data
4結(jié)束語
對稱加密算法在密碼學中有重要的意義,在保密實踐中具有非常重要的實際意義,目前仍然是密碼學研究的重點。endprint