導航:首頁 > 文檔加密 > aes的總體加密流程圖

aes的總體加密流程圖

發布時間:2022-10-30 21:31:38

1. AES加密的詳細過程是怎麼樣的

詳細過程如下圖:

AES加密標准又稱為高級加密標准Rijndael加密法,是美國國家標准技術研究所NIST旨在取代DES的21世紀的加密標准。AES的基本要求是,採用對稱分組密碼體制,密鑰長度可以為128、192或256位,分組長度128位,演算法應易在各種硬體和軟體上實現。

1998年NIST開始AES第一輪分析、測試和徵集,共產生了15個候選演算法。

1999年3月完成了第二輪AES2的分析、測試。2000年10月2日美國政府正式宣布選中比利時密碼學家Joan Daemen和Vincent Rijmen提出的一種密碼演算法Rijndael作為AES的加密演算法。

AES加密數據塊和密鑰長度可以是128b、192b、256b中的任意一個。AES加密有很多輪的重復和變換。

2. 簡述aes演算法的加密過程

AES加密過程涉及到 4 種操作,分別是位元組替代行移位列混淆輪密鑰加

1.位元組替換:位元組代替的主要功能是通過S盒完成一個位元組到另外一個位元組的映射。

2.行移位:行移位的功能是實現一個4x4矩陣內部位元組之間的置換。

4.輪密鑰加:加密過程中,每輪的輸入與輪密鑰異或一次(當前分組和擴展密鑰的一部分進行按位異或);因為二進制數連續異或一個數結果是不變的,所以在解密時再異或上該輪的密鑰即可恢復輸入。

5.密鑰擴展:其復雜性是確保演算法安全性的重要部分。當分組長度和密鑰長度都是128位時,AES的加密演算法共迭代10輪,需要10個子密鑰。AES的密鑰擴展的目的是將輸入的128位密鑰擴展成11個128位的子密鑰。AES的密鑰擴展演算法是以字為一個基本單位(一個字為4個位元組),剛好是密鑰矩陣的一列。因此4個字(128位)密鑰需要擴展成11個子密鑰,共44個字。

3. AES加解密使用總結

AES, 高級加密標准, 是採用區塊加密的一種標准, 又稱Rijndael加密法. 嚴格上來講, AES和Rijndael又不是完全一樣, AES的區塊長度固定為128比特, 秘鑰長度可以是128, 192或者256. Rijndael加密法可以支持更大范圍的區塊和密鑰長度, Rijndael使用的密鑰和區塊長度均可以是128,192或256比特. AES是對稱加密最流行的演算法之一.

我們不去討論具體的AES的實現, 因為其中要運用到大量的高等數學知識, 單純的了解AES流程其實也沒什麼意義(沒有數學基礎難以理解), 所以我們今天著重來總結一些使用過程中的小點.

當然了分組密碼的加密模式不僅僅是ECB和CBC這兩種, 其他的我們暫不涉及.

上面說的AES是一種區塊加密的標准, 那加密模式其實可以理解為處理不同區塊的方式和聯系.

ECB可以看做最簡單的模式, 需要加密的數據按照區塊的大小分為N個塊, 並對每個塊獨立的進行加密

此種方法的缺點在於同樣的明文塊會被加密成相同的密文塊, 因此, 在某些場合, 這種方法不能提供嚴格的數據保密性. 通過下面圖示例子大家就很容易明白了

我們的項目中使用的就是這種模式, 在CBC模式中, 每個明文塊與前一個塊的加密結果進行異或後, 在進行加密, 所以每個塊的加密都依賴前面塊的加密結果的, 同時為了保證第一個塊的加密, 在第一個塊中需要引入初始化向量iv.

CBC是最常用的模式. 他的缺點是加密過程只能是串列的, 無法並行, 因為每個塊的加密要依賴到前一個塊的加密結果, 同時在加密的時候明文中的細微改變, 會導致後面所有的密文塊都發生變化. 但此種模式也是有優點的, 在解密的過程中, 每個塊的解密依賴上一個塊的加密結果, 所以我們要解密一個塊的時候, 只需要把他前面一個塊也一起讀取, 就可以完成本塊的解密, 所以這個過程是可以並行操作的.

AES加密每個塊blockSize是128比特, 那如果我們要加密的數據不是128比特的倍數, 就會存在最後一個分塊不足128比特, 那這個塊怎麼處理, 就用到了填充模式. 下面是常用的填充模式.

PKCS7可用於填充的塊大小為1-255比特, 填充方式也很容易理解, 使用需填充長度的數值paddingSize 所表示的ASCII碼 paddingChar = chr(paddingSize)對數據進行冗餘填充. (後面有解釋)

PKCS5隻能用來填充8位元組的塊

我們以AES(128)為例, 數據塊長度為128比特, 16位元組, 使用PKCS7填充時, 填充長度為1-16. 注意, 當加密長度是16整數倍時, 反而填充長度是最大的, 要填充16位元組. 原因是 "PKCS7" 拆包時會按協議取最後一個位元組所表徵的數值長度作為數據填充長度, 如果因真實數據長度恰好為16的整數倍而不進行填充, 則拆包時會導致真實數據丟失.

舉一個blockSize為8位元組的例子

第二個塊中不足8位元組, 差4個位元組, 所以用4個4來填充

嚴格來講 PKCS5不能用於AES, 因為AES最小是128比特(16位元組), 只有在使用DES此類blockSize為64比特演算法時, 考慮使用PKCS5

我們的項目最開始加解密庫使用了CryptoSwift, 後來發現有性能問題, 就改為使用IDZSwiftCommonCrypto.

這里咱們結合項目中邊下邊播邊解密來提一個點, 具體的可以參考之前寫的 邊下邊播的總結 . 因為播放器支持拖動, 所以我們在拖拽到一個點, 去網路拉取對應數據時, 應做好range的修正, 一般我們都會以range的start和end為基準, 向前後找到包含這個range的所有塊范圍. 打比方說我們需要的range時10-20, 這是我們應該修正range為0-31, 因為起點10在0-15中, 20 在16-31中. 這是常規的range修正.(第一步 找16倍數點).

但是在實際中, 我們請求一段數據時, 還涉及到解密器的初始化問題, 如果我們是請求的0-31的數據, 因為是從0開始, 所以我們的解密器只需要用key和初始的iv來進行初始化, 那如果經過了第一步的基本range修正後, 我們請求的數據不是從0開始, 那我們則還需要繼續往前讀取16個位元組的數據, 舉個例子, 經過第一步修正後的range為16-31, 那我們應該再往前讀取16位元組, 應該是要0-31 這32個位元組數據, 拿到數據後,使用前16個位元組(上一個塊的密文)當做iv來初始化解密器.

還有一個要注意的點是, 數據解密的過程中, 還有可能會吞掉後面16個位元組的數據, 我暫時沒看源碼, 不知道具體因為什麼, 所以保險起見, 我們的range最好是再向後讀取6個位元組.

感謝閱讀

參考資料

https://zh.wikipedia.org/zh-cn/%E9%AB%98%E7%BA%A7%E5%8A%A0%E5%AF%86%E6%A0%87%E5%87%86
https://segmentfault.com/a/1190000019793040
https://ithelp.ithome.com.tw/articles/10250386

4. AES加密技術

關鍵字
藍牙
流加密
分組加密
des
aes
1
引言隨著機技術的迅速,網路中的信息安全問題越來...
vba、word和資料庫的聯合編程日期:2008-04-05
01:37:06
點擊:15
好評:0
摘要
本文介紹了用vba作為開發語言,用access或foxpro作為數據...
wsdxs.cn/html/pc-theory

5. 求解釋這段安卓代碼中的AES加密流程

AES加密過程涉及到 4 種操作,分別是位元組替代、行移位、列混淆和輪密鑰加。

1.位元組替換:位元組代替的主要功能是通過S盒完成一個位元組到另外一個位元組的映射。

2.行移位:行移位的功能是實現一個4x4矩陣內部位元組之間的置換。


4.輪密鑰加:加密過程中,每輪的輸入與輪密鑰異或一次(當前分組和擴展密鑰的一部分進行按位異或);因為二進制數連續異或一個數結果是不變的,所以在解密時再異或上該輪的密鑰即可恢復輸入。

5.密鑰擴展:其復雜性是確保演算法安全性的重要部分。當分組長度和密鑰長度都是128位時,AES的加密演算法共迭代10輪,需要10個子密鑰。AES的密鑰擴展的目的是將輸入的128位密鑰擴展成11個128位的子密鑰。AES的密鑰擴展演算法是以字為一個基本單位(一個字為4個位元組),剛好是密鑰矩陣的一列。因此4個字(128位)密鑰需要擴展成11個子密鑰,共44個字。

6. des和aes 加解密演算法具體步驟有例子最好

隨著計算機網路和計算機通訊技術的發展,計算機密碼學得到前所未有的重視並迅速普及和發展起來。由於密碼系統的各種性能主要由密碼演算法所決定,不同的演算法決定了不同的密碼體制,而不同的密碼體制又有著不同的優缺點:有的密碼演算法高速簡便,但加解密密鑰相同,密鑰管理困難;有的密碼演算法密鑰管理方便安全,但計算開銷大、處理速度慢。基於此,本文針對兩種典型的密碼演算法DES和RSA的特點進行討論分析,並提出一種以這兩種密碼體制為基礎的混合密碼系統,來實現優勢互補。
1 密碼系統簡介
1.1 密碼系統分類
密碼系統從原理上可分為兩大類,即單密鑰系統和雙密鑰系統。單密鑰系統又稱為對稱密碼系統,其加密密鑰和解密密鑰或者相同,或者實質上相同,即易於從一個密鑰得出另一個,如圖1所示。雙密鑰系統又稱為公開密鑰密碼系統,它有兩個密鑰,一個是公開的,用K1表示,誰都可以使用;另一個是私人密鑰,用K2表示,只由採用此系統的人掌握。從公開的密鑰推不出私人密鑰,如圖2所示。

1.2 兩種密碼系統分析
1.2.1 對稱密碼系統(單鑰密碼系統)
對稱密碼系統中加密和解密均採用同一把密鑰,而且通信雙方必須都要獲得這把密鑰。這就帶來了一系列問題。首先,密鑰本身的發送就存在著風險,如果在發送中丟失,接受方就不可能重新得到密文的內容;其次,多人通信時密鑰的組合的數量會出現爆炸性的膨脹,N個人兩兩通信,需要N*(N-1)/2把密鑰,增加了分發密鑰的代價和難度;最後,由於通信雙方必須事先統一密鑰,才能發送保密的信息,這樣,陌生人之間就無法發送密文了。
1.2.2 公開密鑰密碼系統(雙鑰密碼系統)
公開密鑰密碼系統中,收信人生成兩把數學上關聯但又不同的公鑰和私鑰,私鑰自己保存,把公鑰公布出去,發信人使用收信人的公鑰對通信文件進行加密,收信人收到密文後用私鑰解密。公開密鑰密碼系統的優勢在於,首先,用戶可以把用於加密的鑰匙公開地發給任何人,並且除了持有私有密鑰的收信人之外,無人能解開密文;其次,用戶可以把公開鑰匙發表或刊登出來,使得陌生人之間可以互發保密的通信;最後,公開密鑰密碼系統提供了數字簽字的公開鑒定系統,而這是對稱密碼系統不具備的。
1.3 典型演算法
對稱密碼系統的演算法有DES,AES,RC系列,DEA等,公開密鑰密碼系統的演算法有RSA,Diffie-Hellman, Merkle-Hellman等。
2 DES演算法
DES (Data Encryption Standard,數據加密標准)是一個分組加密演算法,它以64 bit位(8 byte)為分組對數據加密,其中有8 bit奇偶校驗,有效密鑰長度為56 bit。64 位一組的明文從演算法的一端輸入,64 位的密文從另一端輸出。DES演算法的加密和解密用的是同一演算法,它的安全性依賴於所用的密鑰。DES 對64位的明文分組進行操作,通過一個初始置換,將明文分組成左半部分和右半部分,各32位長。然後進行16輪完全相同的運算,這些運算被稱為函數f,在運算過程中數據與密鑰結合。經過16輪後,左、右半部分合在一起經過一個末置換(初始置換的逆置換),完成演算法。在每一輪中,密鑰位移位,然後再從密鑰的56位中選出48位。通過一個擴展置換將數據的右半部分擴展成48位,並通過一個異或操作與48位密鑰結合,通過8個s盒將這48位替代成新的32位數據,再將其置換一次。這些運算構成了函數f。然後,通過另一個異或運算,函數f輸出與左半部分結合,其結果即成為新的右半部分, 原來的右半部分成為新的左半部分。將該操作重復16次,實現DES的16輪運算。
3 RSA演算法
RSA演算法使用兩個密鑰,一個公共密鑰,一個私有密鑰。如用其中一個加密,則可用另一個解密。密鑰長度從40到2048 bit可變。加密時把明文分成塊,塊的大小可變,但不能超過密鑰的長度,RSA演算法把每一塊明文轉化為與密鑰長度相同的密文塊。密鑰越長,加密效果越好,但加密解密的開銷也大,所以要在安全與性能之間折衷考慮,一般64位是較合適的。RSA演算法利用了陷門單向函數的一種可逆模指數運算,描述如下:(1)選擇兩個大素數p和q;(2)計算乘積n=pq和φ(n)=(p-1)(q-1);(3)選擇大於1小於φ(n)的隨機整數e,使得
gcd(e,φ(n))=1;(4)計算d使得de=1modφ(n);(5)對每一個密鑰k=(n,p,q,d,e),定義加密變換為Ek(x)=xemodn,解密變換為Dk(y)=ydmodn,這里x,y∈Zn;(6)以{e,n}為公開密鑰,{p,q,d}為私有密鑰。
4 基於DES和RSA的混合密碼系統
4.1 概述
混合密碼系統充分利用了公鑰密碼和對稱密碼演算法的優點,克服其缺點,解決了每次傳送更新密鑰的問題。發送者自動生成對稱密鑰,用對稱密鑰按照DES演算法加密發送的信息,將生成的密文連同用接受方的公鑰按照RSA演算法加密後的對稱密鑰一起傳送出去。收信者用其密鑰按照RSA演算法解密被加密的密鑰來得到對稱密鑰,並用它來按照DES演算法解密密文。
4.2 具體實現步驟
(1)發信方選擇對稱密鑰K(一般為64位,目前可以達到192位)
(2)發信方加密消息:對明文按64位分組進行操作,通過一個初始置換,將明文分組成左半部分和右半部分。然後進行16輪完全相同的運算,最後,左、右半部分合在一起經過一個末置換(初始置換的逆置換),完成演算法。在每一輪中,密鑰位移位,然後再從密鑰的56位中選出48位。通過一個擴展置換將數據的右半部分擴展成48位,並通過一個異或操作與48位密鑰結合,通過8個S盒將這48位替代成新的32位數據,再將其置換一次。然後通過另一個異或運算,輸出結果與左半部分結合,其結果即成為新的右半部分,原來的右半部分成為新的左半部分。如圖3所示。

(3)收信方產生兩個足夠大的強質數p、q,計算n=p×q和z=(p-1)×(q-1),然後再選取一個與z互素的奇數e,從這個e值找出另一個值d,使之滿足e×d=1 mod (z)條件。以兩組數(n,e) 和 (n,d)分別作為公鑰和私鑰。收信方將公鑰對外公開,從而收信方可以利用收信方的公鑰對 (1)中產生的對稱密鑰的每一位x進行加密變換Ek(x)=xemodn;
(4)發信方將步驟(2)和(3)中得到的消息的密文和對稱密鑰的密文一起發送給收信方;
(5)收信方用(3)中得到的私鑰來對對稱密鑰的每一位y進行解密變換Dk(y)=ydmodn,從而得到(1)中的K;
(6)收信方用對稱密鑰K和DES演算法的逆步驟來對消息進行解密,具體步驟和(2)中恰好相反,也是有16輪迭代。
(7)既可以由收信方保留對稱密鑰K來進行下一次數據通信,也可以由收信方產生新的對稱密鑰,從而使K作廢。
4.3 兩點說明
4.3.1 用公鑰演算法加密密鑰
在混合密碼系統中,公開密鑰演算法不用來加密消息,而用來加密密鑰,這樣做有兩個理由:第一,公鑰演算法比對稱演算法慢,對稱演算法一般比公鑰演算法快一千倍。計算機在大約15年後運行公開密鑰密碼演算法的速度才能比得上現在計算機運行對稱密碼的速度。並且,隨著帶寬需求的增加,比公開密鑰密碼處理更快的加密數據要求越來越多。第二,公開密鑰密碼系統對選擇明文攻擊是脆弱的。密碼分析者只需要加密所有可能的明文,將得到的所有密文與要破解的密文比較,這樣,雖然它不可能恢復解密密鑰,但它能夠確定當前密文所對應的明文。
4.3.2 安全性分析
如果攻擊者無論得到多少密文,都沒有足夠的信息去恢復明文,那麼該密碼系統就是無條件安全的。在理論上,只有一次一密的系統才能真正實現這一點。而在本文所討論的混合密碼系統中,發信方每次可以自由選擇對稱密鑰來加密消息,然後用公鑰演算法來加密對稱密鑰,即用戶可以採用一次一密的方式來進行數據通信,達到上述的無條件安全。
5 小結
基於DES和RSA的混合密碼系統結合了公鑰密碼體制易於密鑰分配的特點和對稱密碼體制易於計算、速度快的特點,為信息的安全傳輸提供了良好的、快捷的途徑,使數據傳輸的密文被破解的幾率大大降低,從而對數據傳輸的安全性形成更有力的保障,並且發信方和收信方對密鑰的操作自由度得到了很大的發揮。

7. XTS-AES加密模式工作原理

http://www.i170.com/Article/71764
AES加密演算法原理
隨著對稱密碼的發展,DES數據加密標准演算法由於密鑰長度較小(56位),已經不適應當今分布式開放網路對數據加密安全性的要求,因此1997年NIST公開徵集新的數據加密標准,即AES[1]。經過三輪的篩選,比利時Joan Daeman和Vincent Rijmen提交的Rijndael演算法被提議為AES的最終演算法。此演算法將成為美國新的數據加密標准而被廣泛應用在各個領域中。盡管人們對AES還有不同的看法,但總體來說,AES作為新一代的數據加密標准匯聚了強安全性、高性能、高效率、易用和靈活等優點。AES設計有三個密鑰長度:128,192,256位,相對而言,AES的128密鑰比DES的56密鑰強1021倍[2]。AES演算法主要包括三個方面:輪變化、圈數和密鑰擴展。本文以128為例,介紹演算法的基本原理;結合AVR匯編語言,實現高級數據加密演算法AES。
AES是分組密鑰,演算法輸入128位數據,密鑰長度也是128位。用Nr表示對一個數據分組加密的輪數(加密輪數與密鑰長度的關系如表1所列)。每一輪都需要一個與輸入分組具有相同長度的擴展密鑰Expandedkey(i)的參與。由於外部輸入的加密密鑰K長度有限,所以在演算法中要用一個密鑰擴展程序(Keyexpansion)把外部密鑰K擴展成更長的比特串,以生成各輪的加密和解密密鑰。
1.1圈變化
AES每一個圈變換由以下三個層組成:
非線性層——進行Subbyte變換;
線行混合層——進行ShiftRow和MixColumn運算;
密鑰加層——進行AddRoundKey運算。
① Subbyte變換是作用在狀態中每個位元組上的一種非線性位元組轉換,可以通過計算出來的S盒進行映射。
② ShiftRow是一個位元組換位。它將狀態中的行按照不同的偏移量進行循環移位,而這個偏移量也是根據Nb的不同而選擇的[3]。
③ 在MixColumn變換中,把狀態中的每一列看作GF(28)上的多項式a(x)與固定多項式c(x)相乘的結果。 b(x)=c(x)*a(x)的系數這樣計算:*運算不是普通的乘法運算,而是特殊的運算,即 b(x)=c(x)·a(x)(mod x4+1) 對於這個運算 b0=02。a0+03。a1+a2+a3 令xtime(a0)=02。a0其中,符號「。」表示模一個八次不可約多項式的同餘乘法[3]。
對於逆變化,其矩陣C要改變成相應的D,即b(x)=d(x)*a(x)。
④ 密鑰加層運算(addround)是將圈密鑰狀態中的對應位元組按位「異或」。
⑤ 根據線性變化的性質[1],解密運算是加密變化的逆變化。這里不再詳細敘述。1.2輪變化 對不同的分組長度,其對應的輪變化次數是不同的,如表1所列。1.3密鑰擴展 AES演算法利用外部輸入密鑰K(密鑰串的字數為Nk),通過密鑰的擴展程序得到共計4(Nr+1)字的擴展密鑰。它涉及如下三個模塊:① 位置變換(rotword)——把一個4位元組的序列[A,B,C,D]變化成[B,C,D,A];② S盒變換(subword)——對一個4位元組進行S盒代替;③ 變換Rcon[i]——Rcon[i]表示32位比特字[xi-1,00,00,00]。這里的x是(02),如 Rcon[1]=[01000000];Rcon[2]=[02000000];Rcon[3]=[04000000]…… 擴展密鑰的生成:擴展密鑰的前Nk個字就是外部密鑰K;以後的字W[[i]]等於它前一個字W[[i-1]]與前第Nk個字W[[i-Nk]]的「異或」,即W[[i]]=W[[i-1]]W[[i- Nk]]。但是若i為Nk的倍數,則W[i]=W[i-Nk]Subword(Rotword(W[[i-1]]))Rcon[i/Nk]。
AES的加密與解密流程如圖1所示。

TraceBack:http://blog.sina.com.cn/s/blog_4b957026010006kf.html

8. AES加密演算法原理

AES是分組密鑰,演算法輸入128位數據,密鑰長度也是128位。用Nr表示對一個數據分組加密的輪數(加密輪數與密鑰長度的關系如表1所列)。每一輪都需要一個與輸入分組具有相同長度的擴展密鑰Expandedkey(i)的參與。由於外部輸入的加密密鑰K長度有限,所以在演算法中要用一個密鑰擴展程序(Keyexpansion)把外部密鑰K擴展成更長的比特串,以生成各輪的加密和解密密鑰。
1.1圈變化
AES每一個圈變換由以下三個層組成:
非線性層——進行Subbyte變換;
線行混合層——進行ShiftRow和MixColumn運算;
密鑰加層——進行AddRoundKey運算。
① Subbyte變換是作用在狀態中每個位元組上的一種非線性位元組轉換,可以通過計算出來的S盒進行映射。

② ShiftRow是一個位元組換位。它將狀態中的行按照不同的偏移量進行循環移位,而這個偏移量也是根據Nb的不同而選擇的[3]。

③ 在MixColumn變換中,把狀態中的每一列看作GF(28)上的多項式a(x)與固定多項式c(x)相乘的結果。 b(x)=c(x)*a(x)的系數這樣計算:
*運算不是普通的乘法運算,而是特殊的運算,即 b(x)=c(x)·a(x)(mod x4+1) 對於這個運算 b0=02。a0+03。a1+a2+a3 令xtime(a0)=02。a0
其中,符號「。」表示模一個八次不可約多項式的同餘乘法[3]。

對於逆變化,其矩陣C要改變成相應的D,即b(x)=d(x)*a(x)。
④ 密鑰加層運算(addround)是將圈密鑰狀態中的對應位元組按位「異或」。

⑤ 根據線性變化的性質[1],解密運算是加密變化的逆變化。

9. 什麼是AES演算法

加密演算法分為單向加密和雙向加密。
單向加密 包括 MD5 , SHA 等摘要演算法。單向加密演算法是不可逆的,也就是無法將加密後的數據恢復成原始數據,除非採取碰撞攻擊和窮舉的方式。像是銀行賬戶密碼的存儲,一般採用的就是單向加密的方式。

雙向加密 是可逆的,存在密文的密鑰,持有密文的一方可以根據密鑰解密得到原始明文,一般用於發送方和接收方都能通過密鑰獲取明文的情況。雙向加密包括對稱加密和非對稱加密。對稱加密包括 DES 加密, AES 加密等,非對稱加密包括 RSA 加密, ECC 加密。
AES 演算法全稱 Advanced Encryption Standard ,是 DES 演算法的替代者,也是當今最流行的對稱加密演算法之一。

要想學習AES演算法,首先要弄清楚三個基本的概念:密鑰、填充、模式。

密鑰是 AES 演算法實現加密和解密的根本。對稱加密演算法之所以對稱,是因為這類演算法對明文的加密和解密需要使用同一個密鑰。

AES支持三種長度的密鑰:

128位,192位,256位

平時大家所說的AES128,AES192,AES256,實際上就是指的AES演算法對不同長度密鑰的使用。從安全性來看,AES256安全性最高。從性能來看,AES128性能最高。本質原因是它們的加密處理輪數不同。

要想了解填充的概念,我們先要了解AES的分組加密特性。AES演算法在對明文加密的時候,並不是把整個明文一股腦加密成一整段密文,而是把明文拆分成一個個獨立的明文塊,每一個明文塊長度128bit。

這些明文塊經過AES加密器的復雜處理,生成一個個獨立的密文塊,這些密文塊拼接在一起,就是最終的AES加密結果。

但是這里涉及到一個問題:

假如一段明文長度是192bit,如果按每128bit一個明文塊來拆分的話,第二個明文塊只有64bit,不足128bit。這時候怎麼辦呢?就需要對明文塊進行填充(Padding)。AES在不同的語言實現中有許多不同的填充演算法,我們只舉出集中典型的填充來介紹一下。

不做任何填充,但是要求明文必須是16位元組的整數倍。

如果明文塊少於16個位元組(128bit),在明文塊末尾補足相應數量的字元,且每個位元組的值等於缺少的字元數。

比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6個位元組,則補全為{1,2,3,4,5,a,b,c,d,e,6,6,6,6,6,6}

如果明文塊少於16個位元組(128bit),在明文塊末尾補足相應數量的位元組,最後一個字元值等於缺少的字元數,其他字元填充隨機數。

比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6個位元組,則可能補全為{1,2,3,4,5,a,b,c,d,e,5,c,3,G,$,6}

需要注意的是,如果在AES加密的時候使用了某一種填充方式,解密的時候也必須採用同樣的填充方式。

AES的工作模式,體現在把明文塊加密成密文塊的處理過程中。AES加密演算法提供了五種不同的工作模式:

ECB、CBC、CTR、CFB、OFB

模式之間的主題思想是近似的,在處理細節上有一些差別。我們這一期只介紹各個模式的基本定義。

電碼本模式 Electronic Codebook Book

密碼分組鏈接模式 CipherBlock Chaining

計算器模式 Counter

密碼反饋模式 CipherFeedBack

輸出反饋模式 OutputFeedBack

如果在AES加密的時候使用了某一種工作模式,解密的時候也必須採用同樣的工作模式。

AES加密主要包括兩個步驟: 密鑰擴展 明文加密

密鑰擴展過程說明(密鑰為16位元組):

函數g的流程說明:

輪常量(Rcon)是一個字,最右邊三個位元組總為0。因此字與Rcon相異或,其結果只是與該字最左的那個位元組相異或。每輪的輪常量不同,定位為Rcon[j] = (RC[j], 0, 0, 0)。(RC是一維數組)
RC生成函數:RC[1] = 1, RC[j] = 2 * RC[j – 1]。
因為16位元組密鑰的只進行10輪的擴展,所以最後生成的RC[j]的值按16進製表示為:

十輪的密鑰擴展後,就能生成44個字大小的擴展密鑰。擴展後的密鑰將用於AES對明文的加密過程。

S盒是16×16個位元組組成的矩陣,行列的索引值分別從0開始,到十六進制的F結束,每個位元組的范圍為(00-FF)。

進行位元組代替的時候,把狀態中的每個位元組分為高4位和低4位。高4位作為行值,低4位作為列值,以這些行列值作為索引從S盒的對應位置取出元素作為輸出,如下圖所示:

S盒的構造方式如下:
(1) 按位元組值得升序逐行初始化S盒。在行y列x的位元組值是{yx}。
(2) 把S盒中的每個位元組映射為它在有限域GF中的逆;{00}映射為它自身{00}。
(3) 把S盒中的每個位元組的8個構成位記為(b7, b6, b5, b4, b3, b2, b1)。對S盒的每個位元組的每個位做如下的變換:

ci指的是值為{63}的位元組c的第i位。
解密過程逆位元組代替使用的是逆S盒,構造方式為

位元組d={05}。

逆向行移位將狀態中後三行執行相反方向的移位操作,如第二行向右循環移動一個位元組,其他行類似。

要注意,圖示的矩陣的乘法和加法都是定義在GF(2^8)上的。
逆向列混淆原理如下:

輪密鑰加後的分組再進行一次輪密鑰加就能恢復原值.所以,只要經過密鑰擴展和明文加密,就能將明文加密成密文,進行解密的時候,只需要進行逆向變換即可。

圖[AES加密演算法的流程]中還需要注意,明文輸入到輸入狀態後,需要進行一輪的輪密鑰加,對輸入狀態進行初始化。 前9輪的加密過程,都需要進行位元組替代、行移位、列混淆和輪密鑰加,但是第10輪則不再需要進行列混淆。

進行解密的時候,需要進行逆向位元組替代,逆向行移位、逆向列混淆和輪密鑰加。

閱讀全文

與aes的總體加密流程圖相關的資料

熱點內容
基於單片機的遙控器設計 瀏覽:517
安卓如何取消圓圖標 瀏覽:11
收件伺服器怎麼樣 瀏覽:48
建築設計規范pdf 瀏覽:98
如何合並兩個pdf 瀏覽:174
刷機包必須要解壓的單詞 瀏覽:483
android課表實現 瀏覽:864
頭條app在哪裡能看見有什麼活動 瀏覽:511
冰櫃壓縮機電容80歐 瀏覽:609
安卓各個版本圖標什麼樣 瀏覽:152
無錫哪裡有製作手機app 瀏覽:538
php字元串轉json數組 瀏覽:6
數控網路編程課程有哪些 瀏覽:482
python30特效程序編碼 瀏覽:392
安卓跟蘋果互傳照片用什麼 瀏覽:848
原創小說app哪個好看 瀏覽:97
首台湖南造鯤鵬伺服器雲伺服器 瀏覽:268
redhatphp 瀏覽:456
android智能家居藍牙 瀏覽:646
pt螺紋編程 瀏覽:451