AES 加密過後長度有多少?
在處理數據加密時,我們經常需要考慮到加密後的數據長度。這對於設計資料表和確保資料安全都是非常重要的。在這篇文章中,我將解釋 AES 加密和 Base64 編碼的長度如何計算。
AES 加密的 Byte 長度
在處理資料加密時,我們經常需要考慮到加密後的資料長度。這對於設計資料庫表格和確保數據安全都是非常重要的。在這篇文章中,我將解釋 AES 加密和 Base64 編碼的長度如何計算。
從第 1 行的回應來看,如果 padding 的方法是使用 PKCS5 或 PKCS7 的話,加密後的長度如下:
1
cipherLen = (clearLen/16 + 1) * 16;
這邊注意,假如你存的身分證是有 10 位數,這邊 (10/16+1)*16=26
,但這邊跟我拿到 24
不一樣。這邊我沒注意的事情有兩點,這邊晚點再提。
由於採用了 256 位 AES 加密,使用了 CBC 模式加 PKCS #5 補齊,所以 AES 的密文字節長度 = (明文長度 +1) / 16 * 16(即比明文長度大的最小的 16 的倍數)。
{{<admonition type=tip>}}
這邊我們看到 (clearLen/16 + 1)
的 clearLen/16
一開始要先除以整數,所以得到會是 0
,所以透過 0+1
再乘以 16
等於 16,跟我 24 長度還是不一樣阿。
後來發現,這邊 AES 長度是 Byte 算出來結果,我標題有破梗,通常我們家密都會轉成 Base64,只要把長度轉成 Base64 長度就可以了。
{{</admonition>}}
AES64 編碼的長度
在將 AES 加密的結果儲存或傳輸時,我們通常會將其轉換為 Base64 格式。這是因為 Base64 編碼可以將任意的二進位制數據轉換為只包含 ASCII 字元的字串,這使得數據更容易被處理和傳輸。然而,這種轉換也會增加數據的長度。Base64 編碼的長度可以用以下公式來計算:
base64Len = ceil(len(data) / 3) * 4
這裡的 len(data)
是原始數據的長度,base64Len
是 Base64 編碼後的長度。
以下是一個 Python 代碼範例,它展示了如何計算 Base64 編碼的長度:
|
|
ceil(len(data) / 3) * 4
這邊公式,長度/3無條件進位取整數
再乘以 4,16/3=5.x=>6,6*4=24
,得到我加密後的數字。