0

我正在编写一个简单的程序来使用 libgcrypt 加密和解密 c 字符串。

在我的程序的一部分中,gcry_cipher_encrypt()这样调用:

gcry_cipher_encrypt(handle, cipher_text, cipher_text_buf_len, plain_text, block_len);

cipher_text_buf_len是 的分配大小cipher_text,在我的程序中等于 的长度plain_text。此处的参考手册也建议了这一点: https ://www.gnupg.org/documentation/manuals/gcrypt/Working-with-cipher-handles.html 。

问题:我无法弄清楚如何获取存储在cipher_text缓冲区中的数据的长度。

任何帮助将不胜感激。提前致谢。瓦拉德

4

1 回答 1

1

我终于找到了。答案是gcry_cipher_encrypt()函数不需要给调用者密文的长度。这是因为在流密码和分组密码中,密文总是与明文的长度相同。因此,调用函数本身可以计算存储在由返回的缓冲区中的数据的长度gcry_cipher_encrypt

引用https://en.wikipedia.org/wiki/Block_size_(cryptography)

在现代密码学中,对称密钥密码一般分为流密码和分组密码。分组密码对固定长度的位串进行操作。这个位串的长度就是块大小。输入(明文)和输出(密文)长度相同;输出不能比输入短——这在逻辑上遵循鸽笼原理和密码必须可逆的事实——输出长于输入是不可取的。

但是应该注意,如果您计划存储或传输加密数据,那么您将需要保存/发送初始化向量(iv)和纯文本填充信息。

于 2022-02-14T13:13:28.767 回答