AES加密 - 使用OpenSSL生成密钥

时间:2011-04-07 11:59:43

标签: c encryption openssl aes

作为参考和作为帖子的延续: how to use OpenSSL to decrypt Java AES-encrypted data?

我有以下问题。

我正在使用OpenSSL库和C编程来加密aes-cbc-128中的数据。 我得到任何输入二进制数据,我必须加密它。

我了解到Java有一个CipherParameters接口来设置IV和KeyParameters。

有没有办法使用openSSL生成IV和密钥?简而言之,如何在C程序中使用openSSL的随机生成器来实现这些目的。你们中的任何人都可以提供一些文档/示例/链接吗?

由于

2 个答案:

答案 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之一之前,需要对随机生成器进行播种。