AES加密方式簡析

2021-09-09 01:22:16 字數 3831 閱讀 3745

最近了解aes加密相關,做乙個總結,希望如有不對之處,請指教

* aes加密是對稱加密 128 192 256 分別表示金鑰的長度

* aes的加密方式會將明文拆分成不同的塊進行加密,例如乙個256 位的資料用128的金鑰加密,則分成

明文1(128位)    明文2(128位)

加密密文1(128位)    密文2(128位)

* 填充:如果明文不是128位(16位元組)的則需要填充,即在明文某個地方補充到16個位元組整數倍的長度,加解密時需要採用同樣的填充方式,否則無法解密成功,以下是幾種填充方式

** nopadding

不進行填充,但是這裡要求明文必須要是16個位元組的整數倍,這個可以使用者本身自己去實現填充,除了該種模式以外的其他填充模式,如果已經是16個位元組的資料的話,會再填充乙個16位元組的資料

** pkcs5padding(預設)

在明文的末尾進行填充,填充的資料是當前和16個位元組相差的數量,例如:

未填充明文

1,2,3,4,5,6,7,8,9,10,11

填充明文(缺少五個滿足16個位元組)

1,2,3,4,5,6,7,8,9,10,11,5,5,5,5,5

** iso10126padding

在明文的末尾進行填充,當前和16個位元組相差的數量填寫在最後,其餘位元組填充隨機數,例如:

未填充明文

1,2,3,4,5,6,7,8,9,10,11

填充明文(缺少五個滿足16個位元組)

1,2,3,4,5,6,7,8,9,10,11,c,b,4,1,5

* 模式,模式是需要制定aes對明文進行加密時使用的模式(這裡並不涉及具體的加密方法,只是加密步驟上的不同模式,在加解密時同樣需要相同的模式,否則無法成功),一共提供了五種模式,模式的基本原理是近似的,但是細節上會有一些變化,如下:

** ecb模式(預設)電碼本模式 electronic codebook book

這個模式是預設的,就只是根據金鑰的位數,將資料分成不同的塊進行加密,加密完成後,再將加密後的資料拼接起來,過程如下:

明文(64位元組) 金鑰(16位元組)

明文1(16位元組)  明文2(16位元組)  明文3(16位元組)  明文4(16位元組)

密文1(16位元組)  密文2(16位元組)  密文3(16位元組)  密文4(16位元組)

密文(64位元組)

優點:簡單、速度快、可並行

缺點:如果明文塊相同,則生成的密文塊也相同,這樣會導致安全性降低

** cbc模式   密碼分組鏈結模式 cipher block chaining

為了解決ecb模式的密文塊相同的缺點,cbc的模式引入了乙個初始向量概念,該向量必須是乙個與金鑰長度相等的資料,在第一次加密前,會使用初始化向量與第一塊資料做異或運算,生成的新資料再進行加密,加密第二塊之前,會拿第一塊的密文資料與第二塊明文進行異或運算後再進行加密,以此類推,解密時也是在解密後,進行異或運算,生成最終的明文。過程如下:

明文(63位元組) 金鑰 (16位元組) 初始向量iv(16位元組)

明文1(16位元組) 明文2(16位元組) 明文3(16位元組) 明文4+乙個0(16位元組) 

異或  +初始向量        +密文1         +密文2         +密文3

密文1(16位元組) 密文2(16位元組) 密文3(16位元組) 密文4(16位元組) 

密文(64位元組)

這裡需要注意如下幾點:

1.向量必須是乙個與金鑰長度相等的資料

2.由於在加密前和解密後都會做異或運算,因此我們的明文可以不用補全,不是16個位元組的倍數也可以,cbc中會自動用0補全進行異或運算

3.在解密時是解密後才會再做異或運算,保證資料解密成功

4.由於自動進行了補全,所以解密出的資料也會在後面補全0,因此獲取到資料時,需要將末尾的0去除,或者根據源資料長度來擷取解密後的資料

優點:每次加密金鑰不同,加強了安全性

cbc的方式解決了ebc的缺點,但是也有其缺點:

1.加密無法並行運算,但是解密可以並行,必須在前乙個塊加密完成後,才能加密後塊,並且也需要填充0在後面,所以並不適合流資料(不適合的原因可能是,需要滿足128位的資料之後才能進行加密,這樣後面才不會有0的補全)

2.如果前乙個資料加密錯誤,那麼後續的資料都是錯的了

3.兩端需要同時約定初始向量iv

** cfb模式: 密碼反饋模式 cipher feedback

這個模式只使用了加密方法,原理是用到了乙個數值異或運算之後再進行一次異或運算,值不改變的原理。並且在加密的時候,如果資料並不滿足乙個金鑰的位元組,那麼只做儲存,待滿足乙個金鑰的位元組後再進行加密 過程如下:

加密:明文(260個位元組) iv(128個位元組)

明文1(128個位元組)    明文2(128個位元組)      明文3(4個位元組)

(iv+key)異或 明文1 (密文1+key)異或 明文1  (密文1+key)異或明文3

密文1(128個位元組)     密文2(128個位元組)      密文3(4個位元組)

解密:密文(260個位元組) iv(128個位元組)金鑰(128位元組)

密文1(128個位元組)      密文2(128個位元組)      密文3(4個位元組)

(iv+key)異或密文1   (密文1+key)異或密文2    (密文1+key)異或密文3

明文1 (128個位元組)     明文2  (128個位元組)      明文3(4個位元組)

這裡需要注意如下幾點:

1.加解密時會返回乙個num,這個num表示還需要幾個數字,才會使用上乙個密文加密,否則一直使用上上乙個

2.加解密時也需要傳入字串的長度

3.由於解密時使用的都是密文來進行解密,並沒有使用上一次解密的明文,因此解密也可以並行

4.由於cfb模式並不需要補全,或者乙個完整的128位元組才能加解密,綜合第三點,所以適合流資料的傳輸。

5.cfb模式不止有cfb128(即與金鑰長度一致),還有cfb1 和cfb8 即加解密1或8位後,再呼叫一次加密器生成新的值,這樣可以使加密更安全,但是就會處理更多的運算,cfb1的運算時間是cfb8的八倍 cfb128的128倍

6.使用cfb128或者cfb8的時候傳入的length單位是位元組,cfb1是length的單位是位。

7.使用cfb1和cfb8的時候,num值會始終為0

優點:解密可同步,可以傳入非16位元組倍數的資料,適合流資料

cfb模式當然也有乙個缺點,解密的時候可以並行解密,但是加密的時候並不可以並行加密。並且也需要選擇iv

** ofb模式: 輸出反饋模式 output feedback

該模式與cfb類似,但是是將iv或者上乙個iv加密後的資料加密,生成的key與明文做異或運算,解密時採用的是同樣的方法,利用了異或運算的對稱性來進行加解密,除了這一點,其餘與cfb一致

加密/解密:

cfb:

(iv+key)異或 明文1 (密文1+key)異或 明文1       (密文1+key)異或明文3

ofb(iv+key)異或明文1 ((iv+key)+key)異或明文1  (((iv+key)+key)+key)異或明文3

優點:與cfb一樣,方便傳輸流資料

** ctr模式: 計算器模式 counter

ofb不能並行的原因就在於需要上一次的iv進行加密後的結果,因此在ctr中我們將(iv+key)+key替換成了(iv+1)+key,這樣我們就不需要依賴上一次的加密結果了。對比如下:

ofb(iv+key)異或明文1 ((iv+key)+key)異或明文1  (((iv+key)+key)+key)異或明文3

ctr(iv+key)異或明文1 ((iv+1)+key)異或明文1    (((iv+1)+1)+key)異或明文3

優點:由於加解密可以並行,因此ctr模式的加解密速度也很快

缺點:iv+1的獲取比較負責,需要獲取瞬時iv

加密方式 對稱加密 AES

對稱加密中aes是比較常用,des因為安全性比不上aes已經用的較少 對稱加密 是指加密解密都是乙個金鑰,通過改金鑰加密,也通過它解密。1.加密 加密 param content 需要加密的內容 param key 金鑰 return public static byte encrypt strin...

AES加密 填充方式

aes就是對16byte 128bit 資料進行加密的過程。說白了就是把128位通過一系列的變化變成另乙個128資料。這裡主要用到2個關鍵的東西。金鑰 key 這個是絕對不能省的。key要先擴張,然後進行10次的行列變化,與資料進行抑或操作。最終才能得到加密後的資料。另乙個,就是初始向量 iv u8...

路由選擇方式簡析

路由選擇方式簡析 典型的路由選擇方式有兩種 靜態路由和動態路由。靜態路由是在路由器中設定的固定的路由表。除非網路管理員干預,否則靜態路由不會發生變化。靜態路由不能對網路的改變作出反映.www.2cto.com 動態路由是網路中的路由器之間相互通訊,傳遞路由資訊,利用收到的路由資訊更新路由器表的過程。...