AES加密 – 使用OpenSSL生成密钥

作为参考和作为post的延续: 如何使用OpenSSL解密Java AES加密数据?

我有以下问题。

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

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

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

谢谢

AES密钥和用于对称加密的IV只是一堆随机字节。 因此任何加密强大的随机数生成器都可以实现。 OpenSSL提供了这样一个随机数生成器(它本身依赖于操作系统提供的任何东西,例如Windows上的CryptGenRandom()或Linux上的/dev/random/dev/urandom )。 该函数是RAND_bytes() 。 所以代码看起来像这样:

 #include  /* ... */ 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 */ } 

假设AES-128:

 unsigned char key[16]; RAND_bytes(key, sizeof(key)); unsigned char iv[16]; RAND_bytes(iv, sizeof(iv)); 

随机生成器需要在使用其中之一之前播种。