嗨,我正在使用 openssl evp api 使用 AES256CBC 加密/解密文件。
该文件使用密钥'k'和iv'v'加密(它们是使用EVP_BytesToKey()
函数生成RAND_bytes()
的并解密上下文。
初始化函数为:
int aes_init(unsigned char* pwd, unsigned int pwd_len,EVP_CIPHER_CTX *e_ctx, EVP_CIPHER_CTX *d_ctx) /* return 0:SUCCESS 1: ERROR */
{
int i, rounds =5; /* rounds */
unsigned char key[32], iv[32], salt[8];
if(!(RAND_bytes(salt,8))) //Writes cryptographically secure random bytes in salt[]
{
perror("\n ERROR,SALT::");
return 1;
}
i = EVP_BytesToKey(EVP_aes_256_cbc(),EVP_sha1(),salt,pwd,pwd_len,rounds,key,iv);
}
我打算实现的是这种情况:
用户使用密钥 k 和 IV v 加密文件 A。程序正常退出 那么如果现在用户现在想要解密加密的文件 A,他/她将需要相同的密码上下文,即相同的密钥 k,相同的 IV。
所以我的问题是如何安全地保存密钥和iv(用于加密的相同),以便以后可以使用它来解密文件。
注意: 我已经看到一些商业加密产品为此创建了一种密钥库,不知道它是如何完成的。
有没有为此遵循的任何指导方针?
任何建议将不胜感激..
非常感谢