openssl enc -d -p -aes-256-cbc -md md5 -in encrypted_file -out clear_file -pass file:./key_file -v
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);
使用EVP_BytesToKey()返回错误的key和iv可能出了什么问题?
我试过用iter计数值做实验,但似乎没有一个能产生工作键和IV。我假设命令行默认的iter计数是1。
同样确认的是,如果我用命令行显示的工作键和iv覆盖从EVP_BytesToKey()返回的内容和硬代码无符号char数组,我的其余代码工作正常,解密正确。
EVP_CIPHER_CTX_new();
if(ctx == NULL) {
printf("Error with EVP_CIPHER_CTX_new.\n");
return;
}
if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv)) {
printf("Error initialising decrypted data.\n");
return;
}
if(1 != EVP_DecryptUpdate(ctx, clear_data, (int *)&interm_len, &enc_data[salt_size], enc_size)) {
printf("Error decrypting data.\n");
return;
}
*clear_size = interm_len;
if(1 != EVP_DecryptFinal_ex(ctx, clear_data + interm_len, (int *)&interm_len)) {
printf("Error decrypting data.\n");
return;
}
*clear_size += interm_len;
EVP_CIPHER_CTX_free(ctx);
有人能帮忙吗?
终于想通了!应该是
EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, (key_size-1), 1, key, iv);
如openssl文档所述
file:pathname pathname的第一行是密码。如果为-passin和-passout参数提供了相同的pathname参数,那么第一行将用于输入密码,下一行用于输出密码。
我已经看到了其他一些关于创建加密的初始化向量(IV)的问题,似乎使用随机值是一种选择。然而,我需要生成用于解密的IV,所以我必须使用基于一些salt的数据加密的相同的数据。 node.js加密函数createDecipher表示: crypto.createdecipher()的实现使用OpenSSL函数EVP_BytesToKey派生密钥,摘要算法设置为MD5,一次迭代,没有salt。 好的,听
我从Python得到一个加密的base64字符串。 格式是AES 256 CBC,但当我尝试使用Android解密时,它将解密字符串返回为nil。 这里我使用https://github.com/fukata/aes-256-cbc-example
我正在尝试将Java(简单)加密算法移植到Node JS。我需要能够解密/加密从Java端加密/解密的东西。 我被困在一开始,密码的初始化。 在Java中,我用获取密钥,用获取初始化向量: NodeJS需要一个密钥缓冲区和一个IV缓冲区,但是,我不知道如何从头开始计算它们: 另外,AES/CBC/PKCS5P的匹配算法字符串是什么?
我在想办法做这样的事。我不知道怎么称呼它,所以我不知道它是否存在或者如何找到它。欢迎使用一些关键字:) 和混合==混合器(var_2,fix_2); 所以为了继续,我需要从2个变量中生成随机数据。1是用户的变量,1是我提供的。 第一次,我用这两个变量和一个函数生成数据。 然后,如果用户数据改变,用另一个函数,我用第一个结果和新的用户数据计算新的供应数据。如果我再次使用计算数据和新用户数据,我必须获
下面是一个生成IV并将其转换为Base64字符串的示例... 但是,当我将IV的字符串表示形式传递到加密方法中,然后将其转换回字节数组时,下面的代码会失败,说明IV的大小不正确。 在字节数组和字符串表示之间有没有一种标准的转换加密密钥和IV的方法?
这是可能的还是加密必须共享和使用相同的密钥? 主要目的就是这样。 我将有两个客户端可以发送和接收加密数据到彼此。