【发布时间】:2015-03-04 01:38:16
【问题描述】:
我正在使用 AES/GCM,但以下是其他模式的一般问题,例如 AES/CBC。我向libgcrypt 拨打了以下电话:
#define COUNTOF(x) ( sizeof(x) / sizeof(x[0]) )
#define ROUNDUP(x, b) ( (x) ? (((x) + (b - 1)) / b) * b : b)
const byte cipher[] = { 0xD0,0x6D,0x69,0x0F ... };
byte recovered[ ROUNDUP(COUNTOF(cipher), 16) ];
...
err = gcry_cipher_decrypt(
handle, // gcry_cipher_hd_t
recovered, // void *
COUNTOF(recovered), // size_t
cipher, // const void *
COUNTOF(cipher)); // size_t
我不知道如何确定生成的恢复文本的大小。我检查了Working with cipher handles 参考,它没有被讨论(并且'pad 有 0 个命中)。我还检查了tests/basic.c 和tests/fipsdrv.c 中的libgrcrypt 自测,但它们使用相同的超大缓冲区并且从不将缓冲区修剪为实际大小。
如何确定recovered 缓冲区中返回给我的数据的大小?
【问题讨论】:
-
您使用的是哪种密码?
-
@Collin - 我试图避免这种情况,因为编码问题的特定实例使用 AES/GCM (Steps to decrypt encrypted data in Crypto++ in libgcrypt)。但一般来说,对于像 CBC 这样的模式,我需要知道恢复文本的大小。
标签: c encryption libgcrypt