我怎样才能#包含encryptionstring的文件?

我用MinGW / gcc在Windows上编写一个C应用程序。 我需要使用#include指令来包含一个包含encryptionstring的文件。 该string将在运行时解密。 我想要这样做,如果用hex编辑器查看可执行文件,string将不可见。

我试过这个,但是不行。 不过你明白了:

char *hidden_str = #include "encrypted_text.dat" 

那里可能有些非转义的东西让编译器感到困惑。 我不知道。 我不知道encryption后会发生什么。

如果有更好的办法,我愿意接受。

Solutions Collecting From Web of "我怎样才能#包含encryptionstring的文件?"

如果您在安装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]); } 

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

尝试这样做,而不是:

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

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

将其编码为十六进制/八进制。 我不知道什么是最简单的方法来编码它 – 你可以使用,例如,“\ xAB \ xCF …”,与八进制一样,或者你可以使用一个数组初始化类似的东西(不要在这引用我):

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

(你甚至可以使用初始化器的十进制值。)

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