您好我正在尝试编写一个使用EVP_Encrypt Openssl库的程序,但我遇到了一些麻烦。我使用帖子Assistance with openssl blowfish simple example inserting garbage characters作为指导,认为它应该给我一个很好的起点。但是,我很确定出现了问题,但我无法找到答案。我知道有些事情是错的,因为我使用openssl来测试密文是否可以被解密。命令为:cat file.enc | openssl bf-cbc -d -K cafefacedeadbeef -iv 0 > output
其中file.enc
是由我的程序创建的密文文件。运行Openssl命令后,我收到此错误消息bad decrypt
7418:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:330:
这个问题可能与我试图将初始化向量或我在密钥中读取的方式相关但我不是正面的事实。任何帮助都会很棒。
加密功能:
void encrypt(unsigned char *key, unsigned char* msg)
{
unsigned char iv[8]={0};
int length = 0;
EVP_CIPHER_CTX enc_struct;
EVP_CIPHER_CTX_init(&enc_struct);
EVP_EncryptInit(&enc_struct, EVP_bf_cbc(), key, iv);
unsigned char* out = (unsigned char *) malloc(sizeof(unsigned char) * 1024 +EVP_MAX_BLOCK_LENGTH);
if (EVP_EncryptUpdate(&enc_struct, out, &length, msg, 8) != 1)
{
printf("error update\n");
exit(EXIT_FAILURE);
}
write(STDOUT_FILENO, out, length);
int temp_length = 0;
if(EVP_EncryptFinal(&enc_struct, out+length, &temp_length) !=1)
{
printf("error final\n");
exit(EXIT_FAILURE);
}
write(STDOUT_FILENO, out+length, temp_length);
EVP_CIPHER_CTX_cleanup(&enc_struct);
free(out);
}
调用加密函数并读入密钥。
int main(int argc, char* argv[])
{
setprogname("bf");
setproctitle("-%s", "bf");
int decrypt_flag = 0;
int encrypt_flag = 0;
int key_flag = 0;
char ch;
unsigned char raw_key[16] = {'\0'};
if (argc <=1)
help();
memcpy(raw_key, argv[optind], 24);
bytes_read = read(STDIN_FILENO, msg, 8);
if (encrypt_flag)
encrypt(raw_key, msg);
else
decrypt();
return 0;
}