介紹加密模式和填充模式。
介紹兩種加密的模式:
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模式,我發送到伺服器端,伺服器端解不出來,異常了,後來才知道要按照固定格式補位,伺服器會檢查是否是自己的方式補位的方式。