【转】对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)
版權聲明:本文為作者原創,如需轉載,請注明出處
https://blog.csdn.net/weixin_42940826
注:以下圖片來自于《圖解密碼學》,這本書講的更全面細致,建議閱讀,在我資源庫中有此書,還有使用go語言具體實現和解釋此書中的各種加密算法的文檔,有需要的可以自習前往免費下載
Q:為什么需要分組模式?
A:明文的長度不固定,而分組密碼只能處理特定長度的一塊數據,這就需要對分組密碼的算法進行迭代,以便將一段很長的明文全部加密,而迭代的方法就是分組的模式。
一圖全覽五種分組模式
五種模式詳解
1. ECB - Electronic Code Book, 電子密碼本模式
- 特點: 簡單, 效率高, 密文有規律, 容易被破解
- 最后一個明文分組必須要填充
- des/3des -> 最后一個分組填充滿8字節
- aes -> 最后一個分組填充滿16字節
- 不需要初始化向量
2. CBC - Cipher Block Chaining, 密碼塊鏈模式(推薦使用)
- 特點: 密文沒有規律, 經常使用的加密方式
- 最后一個明文分組需要填充
- des/3des -> 最后一個分組填充滿8字節
- aes -> 最后一個分組填充滿16字節
- 需要一個初始化向量 - 一個數組
- 數組的長度: 與明文分組相等
- 數據來源: 負責加密的人的提供的
- 加解密使用的初始化向量值必須相同
3. CFB - Cipher FeedBack, 密文反饋模式
- 特點: 密文沒有規律, 明文分組是和一個數據流進行的按位異或操作, 最終生成了密文
- 需要一個初始化向量 - 一個數組
- 數組的長度: 與明文分組相等
- 數據來源: 負責加密的人的提供的
- 加解密使用的初始化向量值必須相同
- 不需要填充
4. OFB - Output-Feedback, 輸出反饋模式
- 特點: 密文沒有規律, 明文分組是和一個數據流進行的按位異或操作, 最終生成了密文
- 需要一個初始化向量 - 一個數組
- 數組的長度: 與明文分組相等
- 數據來源: 負責加密的人的提供的
- 加解密使用的初始化向量值必須相同
- 不需要填充
5. CTR - CounTeR, 計數器模式(重點,推薦使用)
- 特點: 密文沒有規律, 明文分組是和一個數據流進行的按位異或操作, 最終生成了密文
- 不需要初始化向量
- go接口中的iv可以理解為隨機數種子, iv的長度 == 明文分組的長度
- 不需要填充
這里我們有必要給出CTR模式額解密流程,因為CTR模式的解密和加密是一模一樣的過程,在程序實現中也是可逆的,具體程序在文章實現底部有鏈接
通過對比發現CTR加密即解密,解密即加密,且各分組之間是獨立的,可以并發完成,效率高。
總結
以上五種分組模式中,ECB模式很容易被破解,如今已經很少再使用,其余四種分組模式各有千秋。
但極力推薦CBC模式和CTR模式,尤其是CTR模式,不需要填充,代碼實現起來很方便。而且加密和解密的方法是一樣的,并且可以實現并發分組,效率高,安全性也有保障
Q:何時需要填充,何時不需要填充?
A:觀察分組模式的圖示可以看出,加密后再進行異或操作的不需要填充,而先進行異或操作再加密的則需要填充,這是因為異或操作需要兩個相同長度的數據,一一對比計算!
代碼實現
篇幅有限,我在這篇帖子用以上分組模式實現了AES、DES、3DES的加密解密(go語言),輕戳了解。
CBC模式實現DES和3DES加密解密
CTR模式實現AES加密解密
總結
以上是生活随笔為你收集整理的【转】对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兴业银行信用卡佳明手表多少钱?怎么购买?
- 下一篇: 信用卡欠款还不上跑路可以吗