我如何#include带有加密字符串的文件?

时间:2011-06-05 00:41:28

标签: c windows visual-studio encryption mingw

我正在使用MinGW / gcc在Windows上编写C应用程序。我需要使用#include指令来包含一个包含加密字符串的文件。该字符串将在运行时解密。我想这样做,所以如果用十六进制编辑器查看可执行文件,字符串将不可见。

我试过这个,但它没有用。但是你明白了这个想法:

char *hidden_str =
#include "encrypted_text.dat"

那里可能存在未转义的内容,令编译器感到困惑。我不知道。我不知道加密后会发生什么。

如果有更好的方法,我可以接受它。

3 个答案:

答案 0 :(得分:4)

如果在安装MinGW时安装并配置了MSYS,则应该可以访问名为xxd的命令,该命令采用文件的十六进制转储。通过使用-i命令行标志,您可以输出一个C友好文件,您可以轻松导入该文件。

示例调用将是:

xxd -i in_file output.h

output.h的内容如下:

unsigned char in_file[] = {
  0x68, 0x65, 0x6c, 0x6c, 0x6f
};
unsigned int in_file_len = 5;

然后,您可以将该文件包含在C源代码中并可以访问它:

#include "output.h"

unsigned int i;
for(i = 0; i < in_file_len; i++)
{
    printf("%c", in_file[i]);
}

答案 1 :(得分:1)

编译器不喜欢文件中的二进制数据。

尝试这样做:

char hidden_str[] = {
    65, 66, 67, ...
};

编写一个简单的程序从.dat文件生成相关的数据行并不困难,每行的字符数有限。

答案 2 :(得分:1)

将其编码为十六进制/八进制。我不确定编码它的最简单方法是什么 - 你可以使用,例如“\ xAB \ xCF ...”,与八进制相同,或者你可以使用类似的数组初始化器(不要引用我的话):

char hidden_str[64] = {0xAB, 0xCf, ...};

(您甚至可以使用初始化程序的十进制值。)

显然,无论你做什么,你都必须将加密文本预处理成十六进制表示 - 这对于“玩具”程序来说很容易。