gpt4 book ai didi

C - 能够读取 EVP 加密文件,但是当我将它存储在一个字符数组中时,一切都消失了

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:04 34 4
gpt4 key购买 nike

我有一个 EVP 加密文件,我想通过套接字发送它。但是,我意识到没有发送任何内容,因为我将文件读入的数组中似乎没有存储任何内容,我确信其中存储了一些内容,因为我在读取此文件后能够解密。

下面的代码片段是让我感到困惑的部分。

    FILE *fp;
long lSize;
fp = fopen ( EVP_file , "rb" );
fseek(fp, 0L, SEEK_END);
int fsize = ftell(fp);
fseek(fp, 0L, SEEK_SET);
unsigned char *indata = malloc(fsize);

fread(indata,sizeof(char),fsize, fp);
printf("%s\n", indata); // printing indata returns me nothing at all
//then DECRYPTION
//decrypting indata works! and i get what i want.

如评论所述,当我打印 indata 时,我没有得到任何输出。我在这里做错了什么吗?我需要将它存储在这个数组中,以便我可以通过套接字发送它。

附言。当我使用纯文本文件时,它工作得很好。

提前致谢!

最佳答案

如果它只是文本数据(ascii 字符,可能是 utf-8,但不是二进制)你需要nul 终止缓冲区,添加一个额外的字节到 malloc()ed 大小然后

indata[fsize] = '\0';

否则你不能用 printf() 打印它,相反你可以做一个十六进制转储来可视化数据,比如

for (size_t i = 0 ; i < fsize ; ++i)
{
fprintf(stdout, "0x%02X ", (unsigned char) indata[i]);
if ((i + 1) % 16 != 0)
continue;
fprintf(stdout, "\n");
}

它是否有用取决于您对数据的兴趣。

还有:

  1. 检查 fopen() 是否失败,检查返回值是否为 NULL
  2. 检查 malloc() 没有失败,同时针对 NULL 返回值。

关于C - 能够读取 EVP 加密文件,但是当我将它存储在一个字符数组中时,一切都消失了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34656745/

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