作为参考和作为帖子的延续: how to use OpenSSL to decrypt Java AES-encrypted data?
我有以下问题。
我正在使用OpenSSL库和C编程来加密aes-cbc-128中的数据。 我得到任何输入二进制数据,我必须加密它。
我了解到Java有一个CipherParameters接口来设置IV和KeyParameters。
有没有办法使用openSSL生成IV和密钥?简而言之,如何在C程序中使用openSSL的随机生成器来实现这些目的。你们中的任何人都可以提供一些文档/示例/链接吗?
由于
答案 0 :(得分:13)
AES密钥和用于对称加密的IV只是一堆随机字节。因此任何加密强大的随机数发生器都可以解决这个问题。 OpenSSL提供了这样一个随机数生成器(它本身依赖于操作系统提供的任何内容,例如Windows上的CryptGenRandom()
或Linux上的/dev/random
和/dev/urandom
。该函数是RAND_bytes()
。所以代码看起来像这样:
#include <openssl/rand.h>
/* ... */
unsigned char key[16], iv[16];
if (!RAND_bytes(key, sizeof key)) {
/* OpenSSL reports a failure, act accordingly */
}
if (!RAND_bytes(iv, sizeof iv)) {
/* OpenSSL reports a failure, act accordingly */
}
答案 1 :(得分:2)
假设AES-128:
unsigned char key[16];
RAND_bytes(key, sizeof(key));
unsigned char iv[16];
RAND_bytes(iv, sizeof(iv));
在使用those之一之前,需要对随机生成器进行播种。