AES 加密過後長度有多少?

AES 加密過後長度有多少?

在處理數據加密時,我們經常需要考慮到加密後的數據長度。這對於設計資料表和確保資料安全都是非常重要的。在這篇文章中,我將解釋 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,得到我加密後的數字。

相关推荐

猫吃咸了会怎么样?

猫吃咸了会怎么样?

📅 09-15 👁️ 6248
道奇srt地狱猫多少钱

道奇srt地狱猫多少钱

📅 07-27 👁️ 4724
素不知道的素的意思(素不知道素什么意思)