gpt4 book ai didi

c++ - AES_cfb128_encrypt 不解密加密文件中的所有字节

转载 作者:行者123 更新时间:2023-11-28 02:29:03 32 4
gpt4 key购买 nike

所以我在 C++ 中使用以下代码和 Openssl。我从另一个 SO 线程得到这个。

int bytes_read, bytes_written;


unsigned char indata[AES_BLOCK_SIZE];
unsigned char outdata[AES_BLOCK_SIZE];

/* ckey and ivec are the two 128-bits keys necesary to
en- and recrypt your data. Note that ckey can be
192 or 256 bits as well */
unsigned char ckey[] = "thiskeyisverybad";
unsigned char ivec[] = "dontusethisinput";

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

/* set the encryption key */
AES_set_encrypt_key(ckey, 128, &key);

/* set where on the 128 bit encrypted block to begin encryption*/
int num = 0;

FILE *ifp = fopen("out.txt", "r");
FILE *ofp = fopen("orig.txt", "w");

while (true) {
bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifp);

AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec, &num,
AES_DECRYPT); //or AES_DECRYPT

bytes_written = fwrite(outdata, 1, bytes_read, ofp);
if (bytes_read < AES_BLOCK_SIZE) {
std::cout << bytes_read << std::endl;
break;
}
}

fclose(ifp);
fclose(ofp);

我正在做的是通过先将 AES_ENCRYPT 传递给 AES_set_encrypt_key 来加密文件“test.txt”,然后尝试解密同一个文件。加密文件存储为 out.txt。

我使用上面的代码解密。我的问题是解密后的文件似乎只能解密 454 字节的数据。它正确地解密了数据,但不是全部。我尝试了一个小于 454 字节的测试文件,它运行良好,但使用 8kb 文件、14kb 文件等总是导致只有 454 字节被解密。但是,加密文件的大小是正确的(即 ~14kb 的加密文件对应 14kb 的测试文件)。

将“ivec”设为空字符串可以让我解密 545 字节的加密文本。

我做错了什么?

最佳答案

好的,在查看了一些开源实现后,我设法找到了解决方案。

问题是我使用 fopen 作为文本读/写而不是作为二进制读/写。

修复:

  FILE *ifp = fopen("out.txt", "rb");
FILE *ofp = fopen("orig.txt", "wb");

关于c++ - AES_cfb128_encrypt 不解密加密文件中的所有字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29482989/

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