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

标签 c file encryption

我有一个 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/

相关文章:

file - 什么是 .meta 文件,为什么 Unity 会为我的所有 Assets 创建它们?

java - 如何在 Jar 中加载与其加载的类无关的文件

c# - 我如何在 ASP.NET 中加密和解密我的 Cookie

C中的命令行输入

c - 错误调用对象 ""不是 c 中的函数或函数指针

javascript - 如何将 LLVM IR br 转换回 while 循环

c - 暂停远程进程的执行(C、Windows)

linux - 查找修改过的文件并将它们回显到服务器根目录上的 txt 文件中

c# - SQL Server 2016中列加密时如何查询数据

c++ - 我如何从用户那里得到字母表