我正在使用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? –