gpt4 book ai didi

c++ - 用 C++ 解密文件,用 openssl -aes-128-cbc 加密

转载 作者:太空狗 更新时间:2023-10-29 23:05:25 31 4
gpt4 key购买 nike

我正在尝试用 C++ 解密一个文件。此文件使用以下命令加密:

openssl enc -nosalt -aes-128-cbc -pass pass:test -in "test.txt" -out "test_enc.txt" -p

控制台显示 key=098F6BCD4621D373CADE4E832627B4F6iv=0A9172716AE6428409885B8B829CCB05

在 C++ 中,我包含了 #include openssl/aes.h 行并尝试使用以下代码解密:

const char *indata = string.toAscii().constData();

unsigned char outdata[strlen(indata)];

unsigned char ckey[] = "098F6BCD4621D373CADE4E832627B4F6";
unsigned char ivec[] = "0A9172716AE6428409885B8B829CCB05";

/* data structure that contains the key itself */
AES_KEY key;

/* set the encryption key */
AES_set_decrypt_key(ckey, 256, &key);

AES_cbc_encrypt((unsigned char*) indata, outdata, strlen(indata), &key, ivec, AES_DECRYPT);

QString result = QString((const char*) outdata);

return result;

变量 outdata 包含与使用 OpenSSL 加密之前不同的值。

最佳答案

您将 -aes-128-cbc 指定为 OpenSSL 上的一个选项,因此 key 和初始化 vector 的长度将为 128 位openssl 将它们打印为十六进制字符串,因为如果打印二进制,它们会在控制台上被混淆。

因此,您应该将 ckey[]ivec[] 初始化为十六进制字符串的二进制值,如下所示:

unsigned char ckey[] = "\x09\x8F\x6B\xCD\x46\x21\xD3\x73\xCA\xDE\x4E\x83\x26\x27\xB4\xF6";
unsigned char ivec[] = "\x0A\x91\x72\x71\x6A\xE6\x42\x84\x09\x88\x5B\x8B\x82\x9C\xCB\x05";

并且,在以下情况下使用 key 长度 128 而不是 256:

AES_set_decrypt_key(ckey, 128, &key);

关于c++ - 用 C++ 解密文件,用 openssl -aes-128-cbc 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19660943/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com