高級加密標準(英語(yǔ):Advanced
Encryption Standard,縮寫(xiě):AES),在密碼學(xué)中又稱(chēng)Rijndael加密法,是美國聯(lián)邦政府采用的一種區塊加密標準。這個(gè)標準用來(lái)替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。經(jīng)過(guò)五年的甄選流程,高級加密標準由美國國家標準與技術(shù)研究院(NIST)于2001年11月26日發(fā)布于FIPS
PUB 197,并在2002年5月26日成為有效的標準。2006年,高級加密標準已然成為對稱(chēng)密鑰加密中最流行的算法之一。
不同于它的前任標準DES,Rijndael使用的是代換-置換網(wǎng)絡(luò ),而非Feistel架構。AES在軟件及硬件上都能快速地加解密,相對來(lái)說(shuō)較易于實(shí)現,且只需要很少的存儲器。作為一個(gè)新的加密標準,目前正被部署應用到更廣大的范圍。
之前項目老大問(wèn)我:AES128和AES256主要區別和安全程度是多少?他們對于機器的消耗是怎樣的?兩者性能如何?實(shí)際開(kāi)發(fā)如何選擇?(下面是三位知乎同學(xué)回答的)
AES相比同類(lèi)對稱(chēng)加密算法速度算是非???,比如在有AES-NI的x86服務(wù)器至少能達到幾百M/s的速度。安全性在可預見(jiàn)的未來(lái)是基本等同的,因為即使是128位也足夠復雜無(wú)法被暴力破解?,F在112位密碼還在商業(yè)應用,而128位是112位的幾萬(wàn)倍,所以在實(shí)務(wù)中用128位比較劃算(稍節約資源)。
AES256比128大概需要多花40%的時(shí)間,用于多出的4輪round key生成以及對應的SPN操作。另外,產(chǎn)生256-bit的密鑰可能也需要比128位密鑰多些開(kāi)銷(xiāo),不過(guò)這部分開(kāi)銷(xiāo)應該可以忽略。
安全程度自然是256比128安全,因為目前除了暴力破解,并沒(méi)有十分有效的代數攻擊方法。
針對具體的AES-256或AES-128的軟/硬件實(shí)現有特定的攻擊方式,不好一概而論。
AES128和AES256主要區別是密鑰長(cháng)度不同(分別是128bits,256bits)、加密處理輪數不同(分別是10輪,14輪),后者強度高于前者。當前AES是較為安全的公認的對稱(chēng)加密算法。
現代密碼學(xué)分為對稱(chēng)加密與非對稱(chēng)加密(公鑰加密),代表算法分別有DES(現在發(fā)展為3DES)、AES與RSA等。非對稱(chēng)加密算法的資源消耗大于對稱(chēng)加密。一般是進(jìn)行混合加密處理,例如使用RSA進(jìn)行密鑰分發(fā)、協(xié)商,使用AES進(jìn)行業(yè)務(wù)數據的加解密。
==================================================================================================================
一些關(guān)于一些加密解密對稱(chēng)非對稱(chēng)算法相關(guān)圖片:
關(guān)于用AES128還是AES256算法,個(gè)人認為AES128已經(jīng)足夠用,當然AES256可以作為一個(gè)營(yíng)銷(xiāo)手段使用
一些參考文獻:
http://crypto.stackexchange.com/questions/5118/is-aes-256-weaker-than-192-and-128-bit-versions
http://serverfault.com/questions/51895/are-128-and-256bit-aes-encryption-considered-weak
http://stackoverflow.com/questions/18847580/aes128-vs-aes256-using-bruteforce
http://stackoverflow.com/questions/19061658/how-to-switch-from-aes-256-to-aes-128
https://github.com/sibiantony/ssleuth/issues/15
http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
http://ubuntuforums.org/showthread.php?t=1694923
http://en.wikipedia.org/wiki/AES_implementations
在實(shí)際開(kāi)發(fā)中,如果希望進(jìn)行AES256位的加密解密,
需要事先從java官網(wǎng)下載 local_policy.jar與US_export_policy.jar
http://www.oracle.com/technetwork/java/embedded/embedded-se/downloads/jce-7-download-432124.html
替換%JAVA_HOME%/jre/lib/security的兩個(gè)policy文件,
local_policy.jar與US_export_policy .jar。
主要是為了突破AES算法只能支持到128位的限制。
如果未替換,可能會(huì )得到如下錯誤: *
Exception in thread "main" java.security.InvalidKeyException:
Illegal key size or default parameters
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1011)
at javax.crypto.Cipher.implInit(Cipher.java:786)
at javax.crypto.Cipher.chooseProvider(Cipher.java:849)
at javax.crypto.Cipher.init(Cipher.java:1213)
at javax.crypto.Cipher.init(Cipher.java:1153)
聯(lián)系客服