導航:首頁 > 源碼編譯 > aesecb加密演算法

aesecb加密演算法

發布時間:2023-11-14 16:36:27

『壹』 密碼學基礎(二):對稱加密

加密和解密使用相同的秘鑰稱為對稱加密。

DES:已經淘汰
3DES:相對於DES有所加強,但是仍然存在較大風險
AES:全新的對稱加密演算法

特點決定使用場景,對稱加密擁有如下特點:

速度快,可用於頻率很高的加密場景。

使用同一個秘鑰進行加密和解密。

可選按照128、192、256位為一組的加密方式,加密後的輸出值為所選分組位數的倍數。密鑰的長度不同,推薦加密輪數也不同,加密強度也更強。

例如:
AES加密結果的長度由原字元串長度決定:一個字元為1byte=4bit,一個字元串為n+1byte,因為最後一位為'',所以當字元串長度小於等於15時,AES128得到的16進制結果為32位,也就是32 4=128byte,當長度超過15時,就是64位為128 2byte。

因為對稱加密速度快的特點,對稱加密被廣泛運用在各種加密場所中。但是因為其需要傳遞秘鑰,一旦秘鑰被截獲或者泄露,其加密就會玩完全破解,所以AES一般和RSA一起使用。

因為RSA不用傳遞秘鑰,加密速度慢,所以一般使用RSA加密AES中鎖使用的秘鑰後,再傳遞秘鑰,保證秘鑰的安全。秘鑰安全傳遞成功後,一直使用AES對會話中的信息進行加密,以此來解決AES和RSA的缺點並完美發揮兩者的優點,其中相對經典的例子就是HTTPS加密,後文會專門研究。

本文針對ECB模式下的AES演算法進行大概講解,針對每一步的詳細演算法不再該文討論范圍內。

128位的明文被分成16個位元組的明文矩陣,然後將明文矩陣轉化成狀態矩陣,以「abcdefghijklmnop」的明文為例:

同樣的,128位密鑰被分成16組的狀態矩陣。與明文不同的是,密文會以列為單位,生成最初的4x8x4=128的秘鑰,也就是一個組中有4個元素,每個元素由每列中的4個秘鑰疊加而成,其中矩陣中的每個秘鑰為1個位元組也就是8位。

生成初始的w[0]、w[1]、w[2]、w[3]原始密鑰之後,通過密鑰編排函數,該密鑰矩陣被擴展成一個44個組成的序列W[0],W[1], … ,W[43]。該序列的前4個元素W[0],W[1],W[2],W[3]是原始密鑰,用於加密運算中的初始密鑰加,後面40個字分為10組,每組4個32位的欄位組成,總共為128位,分別用於10輪加密運算中的輪密鑰加密,如下圖所示:

之所以把這一步單獨提出來,是因為ECB和CBC模式中主要的區別就在這一步。

ECB模式中,初始秘鑰擴展後生成秘鑰組後(w0-w43),明文根據當前輪數取出w[i,i+3]進行加密操作。

CBC模式中,則使用前一輪的密文(明文加密之後的值)和當前的明文進行異或操作之後再進行加密操作。如圖所示:

根據不同位數分組,官方推薦的加密輪數:

輪操作加密的第1輪到第9輪的輪函數一樣,包括4個操作:位元組代換、行位移、列混合和輪密鑰加。最後一輪迭代不執行列混合。

當第一組加密完成時,後面的組循環進行加密操作知道所有的組都完成加密操作。

一般會將結果轉化成base64位,此時在iOS中應該使用base64編碼的方式進行解碼操作,而不是UTF-8。

base64是一種編碼方式,常用語傳輸8bit位元組碼。其編碼原理如下所示:

將原數據按照3個位元組取為一組,即為3x8=24位

將3x8=24的數據分為4x6=24的數據,也就是分為了4組

將4個組中的數據分別在高位補上2個0,也就成了8x4=32,所以原數據增大了三分之一。

根據base64編碼表對數據進行轉換,如果要編碼的二進制數據不是3的倍數,最後會剩下1個或2個位元組怎麼辦,Base64用x00位元組在末尾補足後,再在編碼的末尾加上1個或2個=號,表示補了多少位元組,解碼的時候,會自動去掉。

舉個栗子:Man最後的結果就是TWFu。

計算機中所有的數據都是以0和1的二進制來存儲,而所有的文字都是通過ascii表轉化而來進而顯示成對應的語言。但是ascii表中存在許多不可見字元,這些不可見字元在數據傳輸時,有可能經過不同硬體上各種類型的路由,在轉義時容易發生錯誤,所以規定了64個可見字元(a-z、A-Z、0-9、+、/),通過base64轉碼之後,所有的二進制數據都是可見的。

ECB和CBC是兩種加密工作模式。其相同點都是在開始輪加密之前,將明文和密文按照128/192/256進行分組。以128位為例,明文和密文都分為16組,每組1個位元組為8位。

ECB工作模式中,每一組的明文和密文相互獨立,每一組的明文通過對應該組的密文加密後生成密文,不影響其他組。

CBC工作模式中,後一組的明文在加密之前先使用前一組的密文進行異或運算後再和對應該組的密文進行加密操作生成密文。

為簡單的分組加密。將明文和密文分成若干組後,使用密文對明文進行加密生成密文
CBC

加密:

解密:

『貳』 密碼學基礎之對稱加密(一)

就不給定義了,我簡單解釋下,就是我的信息不想讓別人知道,使用 秘鑰(key) 對我的信息進行 加密(encrypt) ,變成鬼符一樣的 秘文(ciphertext) 。別人就算看到了,也無法識別,只有有了秘鑰,把秘文 解密(decrypt) 後才能看懂信息,秘鑰呢?一般人我不告訴他。我的秘鑰是私密信息,所以也叫 私鑰(private key) ,加密和解密用的秘鑰是相同的,所以叫 「對稱加密」 ,也叫 「私鑰加密」

對於明文plaintext,和對稱秘鑰key
加密過程 E(plaintext, key) = ciphertext
解密過程 D(ciphertext, key) = plaintext

對稱加密的分為 分組密碼(block cipher) 流密碼(stream cipher) 兩種類型。本文只介紹分組密碼。

分組密碼是每次只能處理特定長度的一塊(block)數據的一類加解密演算法。AES就是一種分組密碼演算法。AES加密演算法每次可以加密的塊長度是128位(bit)。

ECB模式
使用AES加密演算法ECB模式,每次能加密128位數據,即16個位元組。如果要加密48個位元組內容,我們需要把數據分為3組,每組16個位元組,分別為P1、P2、P3。P1、P2、P3加密後形成的秘文分別為C1、C2、C3,我們把C1、C2、C3依次拼接起來就成為最終的加密結果。

CBC模式

《對稱加密之對稱加密二》正在寫作,會包含分組密碼的更多模式,流密碼及AES的更多知識。

DES加密:舊的加密演算法,NIST規定僅能用於遺留系統和TDEA。(參考文獻[CNS] 3.2章)
TDEA(Triple DEA)加密:很多資料也叫3DES(Triple DES)。(參考文獻[SP800-67])

Python 可以使用 pycrypto 模塊進行AES加解密。安裝 pycrypto 可使用命令 pip install pycrypto 安裝。

下面AES演示第一版,先看下,緊接著就會升級到第二版本。

運行一下,能正常加解密。但是,如果你把要加密的文本,從 aesAlgorithmDemo 改為 hello ,就會運行報錯:

這是因為,AES的分組長度是128位,即16個位元組。有些AES實現,要加密的消息長度不是16個位元組的倍數需要填充。
填充的方法一般是按照PKCS#7填充標准。

如果要數據的長度不是分組的整數倍,需要填充數據到分組的倍數,如果數據的長度是分組的倍數,需要填充分組長度的數據,填充的每個位元組值為填充的長度。PKCS#7支持的分組長度為1到255個位元組。
舉一些例子:
AES的分組長度為16個位元組,不管秘鑰是128位、192位還是256位。如果要加密的數據長度是5個位元組,你需要填充11個位元組,填充的內容位填充的長度0x0b。填充後類似下面表示

如果數據長度是30個位元組,需要填充2個位元組,每個位元組的內容為0x02,如果數據成都恰好為16的倍數,需要填充16個位元組,每個位元組的內容為0x10。

弄明白填充的概念後,我們重寫加解密函數如下:

這樣填充後會不會可其它系統不兼容?不會。一般的AES程序都是支持PKCS#7填充的。

密碼學基礎之RSA與不對稱秘鑰
密碼學基礎系列

[CNS] 《密碼編碼學與網路安全》(第六版)
[SP800-67] NIST Special Publication 800-67 Revision 1, Recommendation for Triple Data Encryption Algorithm (TDEA) Block Cipher, January 2012.
[SSH] OpenSSH CBC模式信息泄露漏洞
[NIST SP 800-57 Part 1 Rev. 4] Recommendation for Key Management, Part 1: General

『叄』 1、對稱加密演算法

指加密和解密使用相同密鑰的加密演算法。對稱加密演算法用來對敏感數據等信息進頃弊指行加密,常用的演算法包括RC4、DES、3DES、AES、DESX、Blowfish、ChaCha20、RC5、RC6。前3種演算法被認為是不安全的,通常禁止使用。

國內:SM1、SM4、ZUC

國際:DES、3DES、AES

說明:SM1的128位保密強度和性能與AES相當,SM4的128位已升級為國際標准

塊密碼演算法:DES、3DES、AES

流密碼演算法:RC4

SM1:對稱加密演算法,加密強度為128位,採用硬體實現; 演算法不公開 ,只能通過相關安全產品進行使用。

SM4:對稱演算法,隨WAPI標准一起公布,可使用軟體實現,加密強度為128位。

SM4分組密碼演算法是我國自主設計的分組對稱密碼演算法,用於實現數據的加密/解密運算,以保證數據和信息的機密性。要保證一個對稱密碼演算法的安全性的基本條件是其具備足夠的密鑰長度,SM4演算法與AES演算法具有相同的密鑰長度分組長度128比特,因此在安全性上高於3DES演算法。

DES(Data Encryption Standard) :數據加密標准,速度較快,適用於加密 大量數據 的場合。

3DES(Triple DES) :是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高。

AES(Advanced Encryption Standard) :高級加密標准,是下一代的加密演算法標准,速度快,安全級別高;

ECB(Electronic Codebook)、特點:運算快速,支持並行處理,需要填充、說明:不推薦使用

CBC (Cipher Block Chaining)、特點:支持並行處理,需要填充、說明:推薦使用

CFB(Cipher Feedback)、特點:支持並行處理,不需要填充、說明:不推薦使用

OFB(Output Feedback)、特點:迭代運算使用流密碼模式,不需要填充、說明:不推薦使用

CTR (Counter)、特點:迭代運算使用流密碼模式,支持並行處理,不需要填充、說明:推薦使用

XTS(XEX-based tweaked-codebook)、特點:不需要填充、說明:用於本地硬碟存儲解決方案中

填充標准:明文長度必須是分組長度的倍數,如雀配卜嘩不是倍數,則必須有填充機制

PKCS#7填充:可處理的分組長度是1到255個位元組

AES演算法使用標准,比如:AES-128-CBC-PKCS#7,其中秘鑰長度128,分組模式CBC,填充標准PKCS#7,AES演算法默認分組128bit

『肆』 AES加密演算法原理

一般的加密通常都是塊加密,如果要加密超過塊大小的數據,就需要涉及填充和鏈加密模式,本文對對稱加密和分組加密中的幾種種模式進行一一分析(ECB、CBC、CFB、OFB,CTR)

這種模式是將整個明文分成若干段相同的小段,然後對每一小段進行加密。

優點:

這種模式是先將明文切分成若干小段,然後每一小段與初始塊或者上一段的密文段進行異或運算後,再與密鑰進行加密。

優點:

計算器模式不常見,在CTR模式中, 有一個自增的運算元,這個運算元用密鑰加密之後的輸出和明文異或的結果得到密文,相當於一次一密。這種加密方式簡單快速,安全可靠,而且可以並行加密,但是 在計算器不能維持很長的情況下,密鑰只能使用一次 。CTR的示意圖如下所示:

優點:

優點:

優點:

『伍』 AES加密演算法256位密鑰與128位密鑰的不同是什麼

一、指代不同

1、256位密鑰:AES的區塊長度固定為256位,密鑰長度則可以是256。

2、128位密鑰:AES的區塊長度固定為128位,密鑰長度則可以是128。

二、安全性不同

1、256位密鑰:256位密鑰安全性高於128位密鑰。

2、檔塌128位密鑰:128位密鑰安全者蠢皮性低於256位密鑰。


(5)aesecb加密演算法擴展閱讀

AES和Rijndael加密法並不完全一樣(雖然在實際應用中二者可以互換),因為Rijndael加密法可以支持更大范圍的區塊和密鑰長度。

AES的區塊長度固定為128位,密鑰長度則可以是128,192或256位;而Rijndael使用的密鑰和區塊長度可以是32位的整數倍,以128位為下限,256位為上限。加密過程中使用的密鑰是由Rijndael密鑰生成方案產生。

對稱/分組密碼一般分為流加密(如OFB、CFB等)和塊加密(如ECB、CBC等)。對於流加密,需要將分組首差密碼轉化為流模式工作。對於塊加密(或稱分組加密),如果要加密超過塊大小的數據,就需要涉及填充和鏈加密模式。

ECB模式是最早採用和最簡單的模式,將加密的數據分成若干組,每組的大小跟加密密鑰長度相同,然後每組都用相同的密鑰進行加密。


『陸』 什麼是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輪則不再需要進行列混淆。

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

閱讀全文

與aesecb加密演算法相關的資料

熱點內容
手機文檔解壓之後解壓包去哪兒了 瀏覽:921
java中網路編程重要嗎 瀏覽:683
如何登錄別人的伺服器 瀏覽:626
調度系統軟體python 瀏覽:205
微信大轉盤抽獎源碼 瀏覽:497
壓縮機損壞的表現 瀏覽:862
同步數據伺服器怎麼用 瀏覽:634
163郵箱伺服器的ip地址 瀏覽:50
伺服器跟域是什麼 瀏覽:128
rails啟動命令 瀏覽:465
logistic命令怎麼用 瀏覽:738
c語言點滴pdf 瀏覽:747
linuxrtc編程 瀏覽:258
linux打包並壓縮命令 瀏覽:644
aes加密的證書格式 瀏覽:99
oracledbcalinux 瀏覽:844
酬勤任務app怎麼被特邀 瀏覽:199
android應用文件夾 瀏覽:1002
平面設計法則pdf 瀏覽:339
3d圓角命令怎麼用 瀏覽:569