RSA 공개 키를 사용하고 AES 키를 암호화하고 해당 AES를 사용하여 HTTP를 통해 대용량 데이터를 타사 사이트로 보내려는 openssl을 사용하고 있습니다. 나는 그것이 많은 암호화를 알고, 두 번째 계층은 네트워크가 다운되었을 때, 데이터가 디스크에 캐시 되어야만한다. POST
ed. 아래 인라인 덩어리있는 내가 this blog에서 예제 코드를 사용하고EVP_CIPHER_CTX에서 AES 키 받기
:
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
을 읽을 필요가있는 몇 가지 마법의 오프셋 (offset) 다음 있습니까? 그렇지 않으면, 그의 함수를 수정하여 key
(및 iv
)을 반환하거나 함수를 버리고 코드를 인라인해야합니다.
여기서 최종 목표는 AES를 사용하여 많은 데이터를 암호화하고 RSA 공개 키를 사용하여 AES 키를 암호화하고 두 가지 모두 base64로 인코딩 한 다음 서버에 브로드 캐스팅하는 것입니다. (나는 올바른 일을하는 방법이라고 생각합니다)
그러면 유일한 문제는 EVP_CIPHER_CTX
에서 키를 추출하는 것입니다.
왜 키 my repository의 전체 예제를 업로드하고 IV 키하지 않으며 IV 당신이 – doptimusprime
을 찾고있는 난 그냥 일에 암호를 해독 할만큼 필요?가 다른 쪽 –
나는 key_data와 소금이 필요합니까? –