在處理數據加密時,我們經常需要考慮到加密後的數據長度。這對於設計資料表和確保資料安全都是非常重要的。在這篇文章中,我將解釋 AES 加密和 Base64 編碼的長度如何計算。
AES 加密的 Byte 長度
在處理資料加密時,我們經常需要考慮到加密後的資料長度。這對於設計資料庫表格和確保數據安全都是非常重要的。在這篇文章中,我將解釋 AES 加密和 Base64 編碼的長度如何計算。
從第 1 行的回應來看,如果 padding 的方法是使用 PKCS5 或 PKCS7 的話,加密後的長度如下:
1
cipherLen = (clearLen/16 + 1) * 16;
參考: 黑毛到白毛的攻城獅之路: 使用 AES 加密後的資料長度
這邊注意,假如你存的身分證是有 10 位數,這邊 (10/16+1)*16=26,但這邊跟我拿到 24 不一樣。這邊我沒注意的事情有兩點,這邊晚點再提。
AES 密文與明文長度的關係 - 張占嶺 - 博客園
由於採用了 256 位 AES 加密,使用了 CBC 模式加 PKCS #5 補齊,所以 AES 的密文字節長度 = (明文長度 +1) / 16 * 16(即比明文長度大的最小的 16 的倍數)。
{{
這邊我們看到 (clearLen/16 + 1) 的 clearLen/16 一開始要先除以整數,所以得到會是 0,所以透過 0+1 再乘以 16 等於 16,跟我 24 長度還是不一樣阿。
後來發現,這邊 AES 長度是 Byte 算出來結果,我標題有破梗,通常我們家密都會轉成 Base64,只要把長度轉成 Base64 長度就可以了。
{{}}
AES64 編碼的長度
在將 AES 加密的結果儲存或傳輸時,我們通常會將其轉換為 Base64 格式。這是因為 Base64 編碼可以將任意的二進位制數據轉換為只包含 ASCII 字元的字串,這使得數據更容易被處理和傳輸。然而,這種轉換也會增加數據的長度。Base64 編碼的長度可以用以下公式來計算:
base64Len = ceil(len(data) / 3) * 4
這裡的 len(data) 是原始數據的長度,base64Len 是 Base64 編碼後的長度。
以下是一個 Python 代碼範例,它展示了如何計算 Base64 編碼的長度:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from hashlib import sha256
from math import ceil
from base64 import b64encode
# 原始數據
data = 'test'
# 計算Base64編碼的長度
base64Len_formula = ceil(len(data) / 3) * 4
base64Len_actual = len(b64encode(data.encode()).decode())
print('公式計算長度: ', base64Len_formula)
print('實際編碼長度: ', base64Len_actual)
# 計算SHA256編碼後的長度
sha256Len = len(b64encode(sha256(data.encode('utf-8')).digest()).decode())
print('SHA256編碼後長度: ', sha256Len)
ceil(len(data) / 3) * 4 這邊公式,長度/3無條件進位取整數再乘以 4,16/3=5.x=>6,6*4=24,得到我加密後的數字。