我想通過套接字發送用RSA加密的大數據。我使用openssl
和c
。如何爲RSA/AES加密生成密碼
由於RSA解密非常慢,我使用常見的直接方式先用AES加密數據,之後再用RSA加密使用的AES密碼。然後,我通過套接字發送AES加密數據和RSA加密密碼,然後以相反方式進行加密。
我與AES加密:
EVP_CIPHER_CTX en;
unsigned char password[65];
int i, x = 0;
unsigned char key[32], iv[32];
unsigned char *ciphertext;
i = dataLength + AES_BLOCK_SIZE -1;
ciphertext = (unsigned char *)malloc(i);
EVP_CIPHER_CTX_init(&en);
EVP_EncryptInit_ex(&en, EVP_aes_256_cbc(), NULL, key, iv);
EVP_EncryptUpdate(&en, ciphertext, &i, (unsigned char*)data, dataLength);
EVP_EncryptFinal_ex(&en, ciphertext+i, &x);
但我怎麼創建key
和iv
安全?現在,我使用下面的功能:
EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha1(), salt, password, 64, 9, key, iv);
我的問題是: 如何創建「密碼」是否正確?
因爲如果我使用rand()
或其他相同的東西,我的嘗試是完全無用的,因爲任何能夠獲得用於「密碼」生成的「隨機性」的人都能夠解密數據,而無需關心RSA加密密碼」。
在openssl
中有安全密碼生成功能嗎?或者是EVP_BytesToKey()
只是錯誤的方式來做我想做的事情?
看看集成加密系統是如何工作的。 Shoup的[ECIES](http://www.shoup.net/papers/iso-2_1.pdf);或Abdalla,Bellare和Rogaway的[DHIES](http://charlotte.ucsd.edu/~mihir/papers/dhaes.pdf)。更好的是,使用該系統而不是重新發明它。這些方案生成所有參數,用分組密碼進行加密,添加完整性標籤,然後使用公鑰加密包裝對稱密鑰。 ECIES系統包裝在橢圓曲線中,而DHIES使用Diffie-Hellman問題。 – jww