我正在使用openssl尝试使用RSA公钥来加密AES密钥,并使用该AES通过HTTP将大数据发送到第三方站点。我知道这是很多加密技术,第二层出现在网络关闭时,并且数据必须缓存在磁盘上,直到它可以是POST
ed。从EVP_CIPHER_CTX获取AES密钥
我一直在使用的示例代码this blog,一大块,其中内联如下:
int aes_init(unsigned char *key_data, int key_data_len, unsigned char *salt, EVP_CIPHER_CTX *e_ctx)
{
int i, nrounds = 5;
unsigned char key[32], iv[32];
/*
* Gen key & IV for AES 256 CBC mode. A SHA1 digest is used to hash the supplied key material.
* nrounds is the number of times the we hash the material. More rounds are more secure but
* slower.
*/
i = EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha1(), salt, key_data, key_data_len, nrounds, key, iv);
if (i != 32) {
printf("Key size is %d bits - should be 256 bits\n", i);
return -1;
}
for(int x = 0; x<32; ++x)
printf("Key: %x iv: %x \n", key[x], iv[x]);
for(int x = 0; x<8; ++x)
printf("salt: %x\n", salt[x]);
EVP_CIPHER_CTX_init(e_ctx);
EVP_EncryptInit_ex(e_ctx, EVP_aes_256_cbc(), NULL, key, iv);
return 0;
}
我想坚持与他aes_init()
功能,但我不能找到一种方法,一旦它被初始化,从EVP_CIPHER_CTX
中获得密钥。
apropos
列出有关EVP_CIPHER_CTX
几个功能:
$ apropos EVP_CIPHER_CTX
EVP_CIPHER_CTX_block_size (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_cipher (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_cleanup (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_ctrl (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_flags (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_get_app_data (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_init (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_iv_length (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_key_length (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_mode (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_nid (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_set_app_data (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_set_key_length (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_set_padding (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_type (3ssl) - EVP cipher routines
EVP_CIPHER_CTX_set_key_length
看起来很有希望,但有那么一些神奇的偏移从我读EVP_CIPHER_CTX
?否则,我将不得不修改其功能以返回key
(和iv
),或丢弃该函数并内联代码。
这里的最终目标是使用AES加密大部分数据,并使用我们的RSA公钥对base64密码进行加密,然后将它们广播到服务器。 (我相信这是正确的做事方式)
唯一的问题是,从EVP_CIPHER_CTX
中提取密钥。
为什么密钥和IV不是密钥和IV,你正在寻找 – doptimusprime
我只是需要足够的解密它在th? e另一面 –
我是否只需要key_data和salt? –