日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

AES密文与明文长度的关系

發(fā)布時間:2023/12/13 综合教程 63 生活家
生活随笔 收集整理的這篇文章主要介紹了 AES密文与明文长度的关系 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考:
https://www.cnblogs.com/adylee/archive/2007/09/14/893438.html
https://blog.csdn.net/liwei16611/article/details/86312599

AES介紹

嚴格地說,AES和Rijndael加密法并不完全一樣(雖然在實際應用中二者可以互換),因為Rijndael加密法可以支持更大范圍的區(qū)塊和密鑰長度:AES的區(qū)塊長度固定為128位,密鑰長度則可以是128,192或256位;而Rijndael使用的密鑰和區(qū)塊長度可以是32位的整數倍,以128位為下限,256位為上限。加密過程中使用的密鑰是由Rijndael密鑰生成方案產生。

AES為分組密碼,分組密碼也就是把明文分成一組一組的,每組長度相等,每次加密一組數據,直到加密完整個明文。在AES標準規(guī)范中,分組長度只能是128位,也就是說,每個分組為16個字節(jié)(每個字節(jié)8位)。密鑰的長度可以使用128位、192位或256位。密鑰的長度不同,推薦加密輪數也不同,如下表所示:

AES 密鑰長度(32位比特字) 分組長度(32位比特字) 加密輪數
AES-128 4 4 10
AES-192 6 4 12
AES-256 8 4 14

輪數在下面介紹,這里實現(xiàn)的是AES-128,也就是密鑰的長度為128位,加密輪數為10輪。
上面說到,AES的加密公式為C = E(K,P),在加密函數E中,會執(zhí)行一個輪函數,并且執(zhí)行10次這個輪函數,這個輪函數的前9次執(zhí)行的操作是一樣的,只有第10次有所不同。也就是說,一個明文分組會被加密10輪。AES的核心就是實現(xiàn)一輪中的所有操作。

密鑰長度

由于采用了256位AES加密,使用了CBC模式加PKCS #5補齊,所以AES的密文字節(jié)長度 = (明文長度 +1) / 16 * 16(即比明文長度大的最小的16的倍數)。
JNCryptor返回的密文長度則是在此基礎上再加上66個字節(jié)。

返回的密文是二進制數據,無法直接顯示。如果需要進一步編碼為可顯示字符串,則需進行BASE64編碼或者十六進制編碼。編碼后的數據長度會進一步增加(BASE64是增長為4/3倍起的最小的4的倍數,十六進制編碼是增長為2倍)。比如,對原文長度在32-47個字節(jié)之間的明文,經過AES256JNCryptor加密后的密文長度就是114個字節(jié),再做一次BASE64編碼轉換成可顯示字符就成了152個字符

明文與密文長度關系

在原始數據長度為 16 的整數倍時
假如原始數據長度等于 16n,則使用 NoPadding 時加密后數據長度等于 16n,其它情況下加密數據長度等于 16*(n+1)。
在不足 16 的整數倍的情況下
假如原始數據長度等于 16n+m [其中 m 小于16],除了 NoPadding 填充之外的任何方式,加密數據長度都等于 16(n+1);

例如:算法/模式/填充(AES/CBC/PKCS5Padding),明文69字符,則密文為69=164+5,其中n為4,m為5,密文長度為16(4+1)=80字節(jié),而如果你再轉為base64之后,長度也會變長。

base64長度

Base64編碼要求把3個8位字節(jié)(38=24)轉化為4個6位的字節(jié)(46=24),之后在6位的前面補兩個0,形成8位一個字節(jié)的形式。
如果剩下的字符不足3個字節(jié),則用0填充,輸出字符使用'=',因此編碼后輸出的文本末尾可能會出現(xiàn)1或2個'='。
為了保證所輸出的編碼位可讀字符,Base64制定了一個編碼表,以便進行統(tǒng)一轉換。編碼表的大小為2^6=64,這也是Base64名稱的由來。它長度為=bytestring * (4 / 3),不能被3整除的,加到最小被3整除的數 ,如80你需要加到81,結果81*(4/3)=108

實例:
V61234567820200612D102103f,V51234567820200612D102103f
6B6N1qoTEmyJKxQOO6xdwXu2xP+bbnjsAadbDpGuOf5CAwtW8qVNseD4cWlAdX47KwTNNmm1NpMsYCSGuqYuGg==
明文長:53
密文base64:88
計算:53=163+5,16(3+1)=64,64(4/3),補兩個0(=)66/34=88

總結

以上是生活随笔為你收集整理的AES密文与明文长度的关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。