【发布时间】:2011-11-12 22:42:24
【问题描述】:
我正在研究 linux/ubuntu。我发现 mcrypt 作为库自动包含在这个平台中。我想用 aes 256 和 cbc padding 7 (iv) 创建一个加密。有人可以给我一个示例,说明如何使用 aes 256 和 cbc iv,填充 7 加密字符串吗?
Rijndael 和 aes 一样!
这是我找到的与我想使用的库的链接:http://linux.die.net/man/3/mcrypt
【问题讨论】:
我正在研究 linux/ubuntu。我发现 mcrypt 作为库自动包含在这个平台中。我想用 aes 256 和 cbc padding 7 (iv) 创建一个加密。有人可以给我一个示例,说明如何使用 aes 256 和 cbc iv,填充 7 加密字符串吗?
Rijndael 和 aes 一样!
这是我找到的与我想使用的库的链接:http://linux.die.net/man/3/mcrypt
【问题讨论】:
你是问如何使用mcrypt?这是一个基本的骨架:
#include <mcrypt.h>
int main()
{
char algo[] = "rijndael-256";
char mode[] = "cbc";
char key[] = ...
char iv[] = ...
MCRYPT td = mcrypt_module_open(algo, NULL, mode, NULL);
if (td == MCRYPT_FAILED) { /* error */ }
int r = mcrypt_generic_init(td, key, keysize, iv);
/* use mdecrypt_generic() or mcrypt_generic() */
mcrypt_generic_deinit(td);
mcrypt_module_close(td);
}
您必须使用mcrypt_enc_get_key_size(td) 和mcrypt_enc_get_iv_size(td) 检查实际的密钥大小和IV 大小,并提供合适的密钥和IV 数据。
编辑:因为它很简单,所以这里有一个添加和去除 PCKS7 填充的算法:
std::string add_pkcs7_padding(std::string s, std::size_t n)
{
const std::size_t fill = n - (s.length() % n);
s.append(fill, static_cast<char>(fill));
return s;
}
std::string strip_pkcs7_padding(std::string s, std::size_t n)
{
const std::size_t pad = static_cast<unsigned char>(*s.rbegin());
return s.substr(0, s.length() - pad);
}
(库级代码当然会测试n 可以用char 表示,并且在剥离过程中输入字符串非空且填充有效。)
【讨论】:
man libmcrypt。