⑴ aes是什麼意思
aes的意思是:
1、密碼學中的高級加密標准(Advanced Encryption Standard,AES),又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標准。
2、原子發射光譜原子發射光譜法(Atomic Emission Spectrometry,簡稱AES),是利用物質在熱激發或電激發下,不同元素的原子或離子發射特徵光譜的差別來判斷物質的組成,並進而進行元素的定性與定量分析的方法。
AES加密
AES加密過程又包括一個作為初始輪的初始密鑰加法(AddRoundKey),接著進行9次輪變換(Round),最後再使用一個輪變換(FinalRound),如圖2.1 AES演算法加密實現過程所示。
每一次Round均由SubBytes,ShiftRows,MixColumns和AddRoundKey共4個步驟構成,FinalRound包含除MixColumns這一步外的其他3個步驟。輪變換及其每一步均作用在中間結果上,將該中間結果稱為狀態,可以形象地表示為一個4*4 B的矩陣。
⑵ 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
⑶ 簡述aes演算法的加密過程
AES加密過程涉及到 4 種操作,分別是位元組替代、行移位、列混淆和輪密鑰加。
1.位元組替換:位元組代替的主要功能是通過S盒完成一個位元組到另外一個位元組的映射。
2.行移位:行移位的功能是實現一個4x4矩陣內部位元組之間的置換。
4.輪密鑰加:加密過程中,每輪的輸入與輪密鑰異或一次(當前分組和擴展密鑰的一部分進行按位異或);因為二進制數連續異或一個數結果是不變的,所以在解密時再異或上該輪的密鑰即可恢復輸入。
5.密鑰擴展:其復雜性是確保演算法安全性的重要部分。當分組長度和密鑰長度都是128位時,AES的加密演算法共迭代10輪,需要10個子密鑰。AES的密鑰擴展的目的是將輸入的128位密鑰擴展成11個128位的子密鑰。AES的密鑰擴展演算法是以字為一個基本單位(一個字為4個位元組),剛好是密鑰矩陣的一列。因此4個字(128位)密鑰需要擴展成11個子密鑰,共44個字。
⑷ AES是什麼
AES是高級加密標准。
高級加密標准(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標准。這個標准用來替代原先的DES,已經被多方分析且廣為全世界所使用。經過五年的甄選流程,高級加密標准由美國國家標准與技術研究院(NIST)於2001年11月26日發布於FIPS PUB 197,並在2002年5月26日成為有效的標准。2006年,高級加密標准已然成為對稱密鑰加密中最流行的演算法之一。
設計者
該演算法為比利時密碼學家Joan Daemen和Vincent Rijmen所設計,結合兩位作者的名字,以Rijndael之命名之,投稿高級加密標準的甄選流程。Rijdael的發音近於 "Rhinedoll,兩位設計者的名字,參考荷蘭語原發音可譯為尤安·達蒙、文森特·萊蒙。(Joan不能譯為女性化的名字「瓊」。另外,西歐的姓名很多是有相同拉丁文或希臘文源頭的,故譯成中文是可能相同)
加密標准
對稱密碼體制的發展趨勢將以分組密碼為重點。分組密碼演算法通常由密鑰擴展演算法和加密(解密)演算法兩部分組成。密鑰擴展演算法將b位元組用戶主密鑰擴展成r個子密鑰。加密演算法由一個密碼學上的弱函數f與r個子密鑰迭代r次組成。混亂和密鑰擴散是分組密碼演算法設計的基本原則。抵禦已知明文的差分和線性攻擊,可變長密鑰和分組是該體制的設計要點。
AES是美國國家標准技術研究所NIST旨在取代DES的21世紀的加密標准。
AES的基本要求是,採用對稱分組密碼體制,密鑰長度的最少支持為128、192、256,分組長度128位,演算法應易於各種硬體和軟體實現。1998年NIST開始AES第一輪分析、測試和徵集,共產生了15個候選演算法。1999年3月完成了第二輪AES2的分析、測試。2000年10月2日美國政府正式宣布選中比利時密碼學家Joan Daemen 和 Vincent Rijmen 提出的一種密碼演算法RIJNDAEL 作為 AES.
在應用方面,盡管DES在安全上是脆弱的,但由於快速DES晶元的大量生產,使得DES仍能暫時繼續使用,為提高安全強度,通常使用獨立密鑰的三級DES。但是DES遲早要被AES代替。流密碼體制較之分組密碼在理論上成熟且安全,但未被列入下一代加密標准。
AES加密數據塊分組長度必須為128比特,密鑰長度可以是128比特、192比特、256比特中的任意一個(如果數據塊及密鑰長度不足時,會補齊)。AES加密有很多輪的重復和變換。大致步驟如下:1、密鑰擴展(KeyExpansion),2、初始輪(Initial Round),3、重復輪(Rounds),每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最終輪(Final Round),最終輪沒有MixColumns。
⑸ 對稱加密演算法AES
AES(Advanced Encryption Standard),高級加密標准,對稱演算法,是下一代的加密演算法標准,速度快,安全級別高,在21世紀AES 標準的一個實現是 Rijndael 演算法;
AES加密演算法是密碼學中的高級加密標准,該加密演算法採用對稱分組密碼體制,密鑰長度的最少支持為128、192、256,分組長度128位,演算法應易於各種硬體和軟體實現。這種加密演算法是美國聯邦政府採用的區塊加密標准,這個標准用來替代原先的DES,已經被多方分析且廣為全世界所使用。
它適用於敏感內容進行加密傳輸,防止被竊取。
⑹ AES是什麼東西有什麼作用
aes指高級加密標准,密碼學中的高級加密標准又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標准。
高級加密標准演算法從很多方面解決了令人擔憂的問題。實際上,攻擊數據加密標準的那褲段腔些手段對於高級加密標准演算法本身並沒有效果。如果採用真正的128位加密技術甚至256位加密技術,蠻力攻擊要取得成功需要耗費相當長的時間。
雖然高級加密標准也有不足的一面,但是,它仍是一個相對新的協議。因此,安全研究人員還沒有那麼多的時間對這種加密方法進行破解試驗,可能會隨時發現一種全新的攻擊手段會攻破這種高級加密標准。至少在理論上存在這種可能性。
密碼說明
嚴格地說,AES和Rijndael加密法並不完全一樣(雖然在實際應用中二者可以互換),因為Rijndael加密法可以支持更大范圍的區塊和密鑰長度:AES的區塊長度固定為128位,密鑰長度則可以是128,192或256位;
而Rijndael使用燃祥的密鑰和區塊長度可以是32位的整數倍,以128位為下限,256位為上胡衫限。加密過程中使用的密鑰是由Rijndael密鑰生成方案產生。
大多數AES計算是在一個特別的有限域完成的。
AES加密過程是在一個4×4的位元組矩陣上運作,這個矩陣又稱為「體(state)」,其初值就是一個明文區塊(矩陣中一個元素大小就是明文區塊中的一個Byte)。
⑺ 對於加密的總結(AES,RSA)
跟第三方聯調的時候會碰到各種加密演算法,所以總結一下。
AES不是將拿到的明文一次性加密,而是分組加密,就是先將明文切分成長度相等的塊,每塊大小128bit,再對每一小塊進行加密。那麼問題就來了,並不是所有的原始明文串能被等分成128bit,例如原串大小200bit,那麼第二個塊只有72bit,所以就需要對第二個塊進行填充處理,讓第二個塊的大小達到128bit。常見的填充模式有
不進行填充,要求原始加密串大小必須是128bit的整數倍;
假設塊大小8位元組,如果這個塊跟8位元組還差n個位元組,那麼就在原始塊填充n,直到滿8位元組。例:塊{1,2,3},跟8位元組差了5個位元組,那麼補全後的結果{1,2,3,5,5,5,5,5}後面是五個5,塊{1,2,3,..7}跟8位元組差了1個位元組,那麼補全後就是{1,2,3,...,7,1},就是補了一個1。
如果恰好8位元組又選擇了PKCS5Padding填充方式呢?塊{1,2,3...8}填充後變成{1,2,3...8,8...8},原串後面被補了8個8,這樣做的原因是方便解密,只需要看最後一位就能算出原塊的大小是多少。
跟PKCS5Padding的填充方式一樣,不同的是,PKCS5Padding只是對8位元組的進行填充,PKCS7Padding可以對1~256位元組大小的block進行填充。openssl里aes的默認填充方式就是PKCS7Padding
AES有多種加密模式,包括:ECB,CBC,CTR,OCF,CFB,最常見的還是ECB和CBC模式。
最簡單的一種加密模式,每個塊進行獨立加密,塊與塊之間加密互不影響,這樣就能並行,效率高。
雖然這樣加密很簡單,但是不安全,如果兩個塊的明文一模一樣,那麼加密出來的東西也一模一樣。
openssl的相關函數:
CBC模式中引入了一個新的概念,初始向量iv。iv的作用就是為了防止同樣的明文塊被加密成同樣的內容。原理是第一個明文塊跟初始向量做異或後加密,第二個塊跟第一個密文塊做異或再加密,依次類推,避免了同樣的塊被加密成同樣的內容。
openssl相關函數:
敲黑板!! 所以跟第三方對接的時候,如果對面說他們用aes加密,務必對他們發起靈魂三問:
簽名的作用是讓接受方驗證你傳過去的數據沒有被篡改;加密的作用是保證數據不被竊取。
原理:你有一個需要被驗簽的原串A。
步驟一:選擇hash演算法將A進行hash得到hash_a;
步驟二:將hash_a進行加密,得到加密值encrypt_a;
步驟三:將原串A和加密的encrypt_a發給第三方,第三方進行驗簽。第三方先解密encrypt_a,得到一個hash值hash_a1,然後對原串A使用同樣的hash演算法進行hash,得到的即為加密前的hash_a,如果hash_a = hash_a1, 那麼驗簽成功。
rsa使用私鑰對信息加密來做簽名,使用公鑰解密去驗簽。
openssl相關函數:
注意:兩個函數中的m,是原串hash後的值,type表示生成m的演算法,例如NID_sha256表示使用sha256對原串進行的hash,返回1為簽名成功或者驗簽成功,-1位為失敗。
再次敲黑板!! 所以如果第三方說使用rsa驗簽,要讓對方告知他們的hash演算法。
首先明確,私鑰加密不等於簽名。加密的時候,使用使用公鑰加密,第三方使用你的私鑰進行解密。
openssl里公鑰加密函數為RSA_public_encrypt,私鑰解密函數為RSA_private_decrypt,具體的可以自己去查看下官方文檔。
rsa也涉及到了填充方式,所以對接的時候也要問清楚
在使用公鑰進行加密時,會發現每次加密出的結果都不一樣,但使用私鑰加密時,每次的結果都一樣,網上查了一圈,說是因為填充方式的原因。
官方文檔說明:
那麼為什麼一定要使用私鑰做簽名,公鑰做加密,而不是公鑰做簽名,私鑰做加密呢?
舉個栗子:
⑻ 加密演算法之AES
AES採用分組密碼體制,首先將明文分成以16個位元組長度為基準位元組段,如果最後不足16位元組則同樣使用填充。然後分組對每段位元組段進行加密得到密文,再將最後得到的密文拼接在一起形成最終的密文。AES演算法的密鑰長度可以分為128位,256位,512位。
整個加密過程如下圖所示:
功能實現,在客戶端中將明文進行AES加密後通過TCP鏈接發送至另一個客戶端,另一端通過密鑰對密文進行解密得到明文
⑼ Advanced Encryption Standard(AES) 加密演算法簡介
AES(The Advanced Encryption Standard)是美國國家標准與技術研究所用於加密電子數據的規范。它被預期能成為人們公認的加密包括金融、電信和政府數字信息的方法。美國國家標准與技術研究所(NIST)在2002年5月26日建立了新的高級數據加密標准(AES)規范。AES是一個新的可以用於保護電子數據的加密演算法。
1998年National Institute of Standards and Technology(NIST)開始AES第一輪分析、測試和徵集,共產生了15個候選演算法。其中包括CAST-256, CRYPTON, DEAL, DFC, E2, FROG, HPC, LOKI97, MAGENTA, MARS,RC6, Rijndael, SAFER+, Serpent, Twofish。 其中五個候選演算法進入第二輪: MARS, RC6, Rijndael, Serpent, andTwofish. 1999年3月完成了第二輪AES2的分析、測試,最終確認Rijndael演算法獲得勝利。NIST於2002年5月26日制定了新的高級加密標准(AES)規范。
AES是典型的對稱加密演算法,應用廣泛。數據發信方將明文和加密密鑰一起經過特殊加密演算法處理後,使其變成復雜的加密密文發送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的密鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密演算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密,這就要求解密方事先必須知道加密密鑰。其優點是對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。不足之處是,雙方都使用同樣鑰匙,安全性得不到保證。
在此扯一下題外話,不對稱加密演算法,比如著名的RSA演算法,使用兩把完全不同但又是完全匹配的一對鑰匙----公鑰和私鑰。在使用不對稱加密演算法加密文件時,只有使用匹配的一對公鑰和私鑰,才能完成對明文的加密和解密過程。加密明文時採用公鑰加密,解密密文時使用私鑰才能完成,而且加密者知道收信方的公鑰,只有解密者才是唯一知道自己私鑰的人。
AES演算法基於排列和置換運算。排列是對數據重新進行安排,置換是將一個數據單元替換為另一個。AES使用幾種不同的方法來執行排列和置換運算。AES是一個迭代的、對稱密鑰分組的密碼,它可以使用128、192和256位密鑰,並且用128位(16位元組)分組加密和解密數據。與公共密鑰加密使用密鑰對不同,對稱密鑰密碼使用相同的密鑰加密和解密數據。通過分組密碼返回的加密數據的位數與輸入數據相同。迭代加密使用一個循環結構,在該循環中重復置換和替換輸入數據。密碼學簡介據記載,公元前400年,古希臘人發明了置換密碼。1881年世界上的第一個電話保密專利出現。在第二次世界大戰期間,德國軍方啟用「恩尼格瑪」密碼機,密碼學在戰爭中起著非常重要的作用。
AES加密過程是在一個4×4的位元組矩陣上運作,這個矩陣又稱為「state」,其初值就是一個明文區塊(矩陣中一個元素大小就是明文區塊中的一個Byte)。加密時,各輪AES加密循環(除最後一輪外)均包含4個步驟:
1.AddRoundKey — 矩陣中的每一個位元組都與該次round key做XOR運算;每個子密鑰由密鑰生成方案產生。
2.SubBytes — 通過一個非線性的替換函數,用查找表的方式把每個位元組替換成對應的位元組。
3.ShiftRows — 將矩陣中的每個橫列進行循環式移位。
4.MixColumns — 為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉換來混合每內聯的四個位元組。
⑽ aes的密碼說明
嚴格地說,AES和Rijndael加密法並不完全一樣(雖然在實際應用中二者可以互換),因為Rijndael加密法可以支持更大范圍的區塊和密鑰長度:AES的區塊長度固定為128 比特,密鑰長度則可以是128,192或256比特;而Rijndael使用的密鑰和區塊長度可以是32位的整數倍,以128位為下限,256比特為上限。加密過程中使用的密鑰是由Rijndael密鑰生成方案產生。
大多數AES計算是在一個特別的有限域完成的。
AES加密過程是在一個4×4的位元組矩陣上運作,這個矩陣又稱為「狀態(state)」,其轎櫻初值就是一個明文區塊(矩粗則陣中一個元素大小就是明文區塊中的一個Byte)。(Rijndael加密法因支持更大的區塊,其矩陣行數可視情況增加)加密時,各輪AES加密循環(除最後一輪外)均包含4個步驟: AddRoundKey — 矩陣中的每一個位元組都與該次輪秘鑰(round key)做XOR運算;每個子密鑰由密鑰生成方案產生。 SubBytes — 通過個非線性的替換函數,用查找表的方式把每個位元組替換成對應的位元組。 ShiftRows — 將矩陣中的每個橫列進岩帆棚行循環式移位。 MixColumns — 為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉換來混合每列的四個位元組。 最後一個加密循環中省略MixColumns步驟,而以另一個AddRoundKey取代。