高級加密標准(Advanced Encryption Standard: AES)是美國國家標准與技術研究院(NIST)在2001年建立了電子數據的加密規范。它是一種分組加密標准,每個加密塊大小為128位,允許的密鑰長度為128、192和256位。
ECB模式(電子密碼本模式:Electronic codebook)
ECB是最簡單的塊密碼加密模式,加密前根據加密塊大小(如AES為128位)分成若干塊,之后將每塊使用相同的密鑰單獨加密,解密同理。
CBC模式(密碼分組鏈接:Cipher-block chaining)
CBC模式對於每個待加密的密碼塊在加密前會先與前一個密碼塊的密文異或然后再用加密器加密。第一個明文塊與一個叫初始化向量
的數據塊異或。
CFB模式(密文反饋:Cipher feedback)
與ECB和CBC模式只能夠加密塊數據不同,CFB能夠將塊密文(Block Cipher)轉換為流密文(Stream Cipher)。
CFB8的加密流程
- 使用加密器加密IV的數據;
- 將明文的最高8位與IV的最高8位異或得到8位密文;
- 將IV數據左移8位,最低8位用剛剛計算得到的8位密文補上。
重復1到3。
CFB1的加密流程
- 使用加密器加密IV的數據;
- 將明文的最高1位與IV的最高1位異或得到1位密文;
- 將IV數據左移1位,最低1位用剛剛計算得到的1位密文補上。
重復1到3。
OpenSSL中AES_cfb8_encrypt
和AES_cfb1_encrypt
分別用來加解密CFB8和CFB1。這兩個函數的參數和AES_cfb128_encrypt完全一樣,但num和length含義略有不同。
- num: 應總是為0 否則會觸發斷言
- length: CFB8單位為byte CFB1單位為bit
CFB模式非常適合對流數據進行加密,解密可以並行計算。
OFB模式(輸出反饋:Output feedback)
OFB是先用塊加密器生成密鑰流(Keystream),然后再將密鑰流與明文流異或得到密文流,解密是先用塊加密器生成密鑰流,再將密鑰流與密文流異或得到明文,由於異或操作的對稱性所以加密和解密的流程是完全一樣的。