本文目錄一覽:
簡述aes算法的加密過程
AES加密過程涉及到 4 種操作,分別是位元組替代、行移位、列混淆和輪密鑰加。
1.位元組替換:位元組代替的主要功能是通過S盒完成一個位元組到另外一個位元組的映射。
2.行移位:行移位的功能是實現一個4×4矩陣內部位元組之間的置換。
4.輪密鑰加:加密過程中,每輪的輸入與輪密鑰異或一次(當前分組和擴展密鑰的一部分進行按位異或);因為二進制數連續異或一個數結果是不變的,所以在解密時再異或上該輪的密鑰即可恢復輸入。
5.密鑰擴展:其複雜性是確保算法安全性的重要部分。當分組長度和密鑰長度都是128位時,AES的加密算法共迭代10輪,需要10個子密鑰。AES的密鑰擴展的目的是將輸入的128位密鑰擴展成11個128位的子密鑰。AES的密鑰擴展算法是以字為一個基本單位(一個字為4個位元組),剛好是密鑰矩陣的一列。因此4個字(128位)密鑰需要擴展成11個子密鑰,共44個字。
aes加密安全嗎
至少在現在是安全的
首先我們來看一下AES加密過程
隨機生成一份密鑰,分為公鑰和私鑰,公鑰發送到公共網絡或者被加密文件的計算機,把私鑰鑰記為A,公鑰記為B,公鑰存儲在系統目錄下,隱藏這個公鑰,因為系統目錄文件比較多,手動尋找密鑰不太現實,就算找到了目錄,因為隱藏了文件,你也找不到,再或者你真的找到了公鑰也沒用,因為公鑰需要和私鑰配合使用才能解密文件,你不可能通過公鑰推算出密碼,除非加密着把私鑰發送給你,你也只剩下一種選擇,暴力破解文件密碼,目前aes128加密算法的,一台普通的計算機需要暴力破解十萬年,還不包括可能出現了意外,以及加密者是否不使用aes128而是採用aes256or512,綜上所述,Aes加密算法非常安全,但Aes加密算法可以被量子計算機破解,所以可能之後就要換成bb84了
AES128_CBC_NoPading加密、sha256withRSA簽名
AES加密中重要的兩個參數KEY、IV且都是16位數字,我這裡將IV默認為16個0
加密的數據data長度必須是16的倍數,否則會加密失敗,加密前需要檢查是否補0處理
主要用到的函數 CCCrypt:
解密先需要將字符串通過base64解碼轉為NSData後進行 AES128解密
sha256withRSA簽名
RSA簽名需要Mac端生成公鑰和私鑰,由於我們項目是後台申請的給了公鑰私鑰字符串,所以是通過字符串轉成SecKeyRef格式。
主要用到的函數SecKeyRawSign
一般客戶端只用來對數據加簽,後台驗簽。
frameworkDemo地址
最近項目用到了,看了很多文章才搞出來,有不對的請指正,謝謝!
AES加密算法原理
AES是分組密鑰,算法輸入128位數據,密鑰長度也是128位。用Nr表示對一個數據分組加密的輪數(加密輪數與密鑰長度的關係如表1所列)。每一輪都需要一個與輸入分組具有相同長度的擴展密鑰Expandedkey(i)的參與。由於外部輸入的加密密鑰K長度有限,所以在算法中要用一個密鑰擴展程序(Keyexpansion)把外部密鑰K擴展成更長的比特串,以生成各輪的加密和解密密鑰。\x0d\x0a1.1圈變化\x0d\x0aAES每一個圈變換由以下三個層組成:\x0d\x0a非線性層——進行Subbyte變換;\x0d\x0a線行混合層——進行ShiftRow和MixColumn運算;\x0d\x0a密鑰加層——進行AddRoundKey運算。\x0d\x0a① Subbyte變換是作用在狀態中每個位元組上的一種非線性位元組轉換,可以通過計算出來的S盒進行映射。\x0d\x0a\x0d\x0a② ShiftRow是一個位元組換位。它將狀態中的行按照不同的偏移量進行循環移位,而這個偏移量也是根據Nb的不同而選擇的[3]。\x0d\x0a\x0d\x0a③ 在MixColumn變換中,把狀態中的每一列看作GF(28)上的多項式a(x)與固定多項式c(x)相乘的結果。 b(x)=c(x)*a(x)的係數這樣計算:\x0d\x0a*運算不是普通的乘法運算,而是特殊的運算,即 b(x)=c(x)·a(x)(mod x4+1) 對於這個運算 b0=02。a0+03。a1+a2+a3 令xtime(a0)=02。a0\x0d\x0a其中,符號「。」表示模一個八次不可約多項式的同餘乘法[3]。\x0d\x0a\x0d\x0a對於逆變化,其矩陣C要改變成相應的D,即b(x)=d(x)*a(x)。\x0d\x0a④ 密鑰加層運算(addround)是將圈密鑰狀態中的對應位元組按位「異或」。\x0d\x0a\x0d\x0a⑤ 根據線性變化的性質[1],解密運算是加密變化的逆變化。
AES-128 加密算法的問題
AES內部始終使用16 byte的分組長度!加密時,如果明文位元組長度不是16的整數倍,要填充到大於該長度的最接近的16的倍數,但是如果剛好等於16的倍數,就額外在添加一個完整的分組,也就是添加16位元組。具體你的例子,得到的是32位元組長度的密文。細節請參考PKCS5/7,這些標準是權威指南!
原創文章,作者:PZTW,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/132922.html