小编Dan*_*ip3的帖子

为什么带有 GCM 的 AES-256 在密文大小上增加了 16 个字节?

我正在使用 Golang 的加密包,特别是 crypto/aes,带有 32 字节的密钥(因此,AES-256)和 GCM 方法(Galois/Counter Mode)。
我从一个文件中读取了多个 16384 字节的块并生成了一个密码块、一个 GCM 方法和一个 12 字节的随机数。
然后,我将随机数添加到密文中,以便在解密时将它们拆分,以访问随机数(因为 12 字节的大小是已知的)。

人们会期望生成的密文是 16384 + 12 个字节 = 16396;但是,在实际加密时,我得到的大小为 16412 字节,因此添加了 16 字节。解密每个块后,我得到 16384 的“正常”大小。

这是一个快速示例。

block, _ := aes.NewCipher([]byte("W9FLKnyv397R82kKuFpfp6y8usGRf49a"))
gcm, _ := cipher.NewGCM(block)
nonce = make([]byte, gcm.nonceSize()) // nonceSize is 12 bytes
_, _ = io.ReadFull(rand.Reader, nonce) // populate nonce with random data


for {
    src := make([]byte, 1024 * 16) // let's hypotise this src is a chunk of a file, …
Run Code Online (Sandbox Code Playgroud)

encryption aes go nonce aes-gcm

2
推荐指数
1
解决办法
862
查看次数

标签 统计

aes ×1

aes-gcm ×1

encryption ×1

go ×1

nonce ×1