天天看點

密碼學系列——加密模式和填充模式

介紹加密模式和填充模式。

介紹兩種加密的模式:

ecb

ecb : electronic codebook, 電子密碼本. 需要加密的消息按照塊密碼的塊大小被分為數個塊,并對每個塊進行獨立加密

優點 : 可以并行處理資料

缺點 : 同樣的原文生成同樣的密文, 不能很好的保護資料

同時加密,原文是一樣的,加密出來的密文也是一樣的

cbc

cbc : cipher-block chaining, 密碼塊連結. 每個明文塊先與前一個密文塊進行異或後,再進行加密。在這種方法中,每個密文塊都依賴于它前面的所有明文塊

優點 : 同樣的原文生成的密文不一樣

缺點 : 串行處理資料.

填充模式:

兩種填充模式,一種是nopadding,另一種是pkcs5padding

nopadding

不填充.

在des加密算法下, 要求原文長度必須是8byte的整數倍

在aes加密算法下, 要求原文長度必須是16byte的整數倍

pkcs5padding

資料塊的大小為8位, 不夠就補足

tips

預設情況下, 加密模式和填充模式為 : ecb/pkcs5padding

如果使用cbc模式, 在初始化cipher對象時, 需要增加參數, 初始化向量iv : ivparameterspec iv = new ivparameterspec(key.getbytes());

這裡介紹一下cbc 同樣的原文生成的密文不一樣這個就有點裝了,其實是這樣子的cbc 需要與前一個密文塊進行異或後,但是明文開始沒有前一個密文,是以呢,我們要有一個iv。

也就是說同樣的key和原文,iv不同生成的密文不一樣。真正的原位生成的密文不一樣,是在消息摘要中。

好了,那麼現在知道了注意的是加密的模式,選擇的是什麼,比如說ecb隻需要key,cbc還需要iv,同時填充模式如果是nopadding 模式,那麼需要自己去填充,這個其實可以自己去設計算法,這樣就不會那麼容易被破解。

說一個個人的例子,公司伺服器補位的時候用的就是自己設計的東西補位的,當時伺服器告訴我是aes模式,我發送到伺服器端,伺服器端解不出來,異常了,後來才知道要按照固定格式補位,伺服器會檢查是否是自己的方式補位的方式。

繼續閱讀