C 用于openssl AES解密的派生密钥和iv
我正在尝试使用C代码中的openssl函数执行AES解密操作,但失败了 使用openssl命令行工具,我可以成功地解密blobC 用于openssl AES解密的派生密钥和iv,c,openssl,C,Openssl,我正在尝试使用C代码中的openssl函数执行AES解密操作,但失败了 使用openssl命令行工具,我可以成功地解密blob openssl enc -d -p -aes-256-cbc -md md5 -in encrypted_file -out clear_file -pass file:./key_file -v 上述命令工作正常 但是当我使用openssl C函数来做同样的事情时,它失败了。失败似乎与错误的键和来自passwd和salt的iv有关 unsigned char key
openssl enc -d -p -aes-256-cbc -md md5 -in encrypted_file -out clear_file -pass file:./key_file -v
上述命令工作正常
但是当我使用openssl C函数来做同样的事情时,它失败了。失败似乎与错误的键和来自passwd和salt的iv有关
unsigned char key[32];
unsigned char iv[16];
EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, key_size, 1, key, iv);
[密钥文件是从密钥文件读取的无符号字符缓冲区。]
salt和key文件的hextump与命令行中使用的内容相匹配。大小也是正确的。(在我的例子中是45字节。)
EVP_BytesToKey()使用返回错误的密钥和iv会出现什么问题
我尝试过用iter计数值进行实验,但似乎没有一个生成工作键和iv。我假设命令行默认的iter计数为1
同样得到确认的是,如果我使用命令行中显示的工作密钥和iv覆盖从EVP_BytesToKey()返回的内容和硬代码无符号字符数组,那么我的代码的其余部分将正常工作并正确解密
关于信息,以下是代码的其余部分(从不同来源复制,在web上的示例)
有人能帮忙吗?终于明白了!
应该是
EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, (key_size-1), 1, key, iv);
正如openssl文档中所解释的
文件:路径名
路径名的第一行是密码。如果为-passin和-passout参数提供了相同的pathname参数,那么第一行将用于输入密码,下一行用于输出密码
我的passwd文件以换行0x0A结尾。所以我从EVP_BytesToKey()的buf中删除了它,它返回正确的key&iv,现在可以解密了
EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, (key_size-1), 1, key, iv);