【问题标题】:How can I #include a file with encrypted string?如何#include 包含加密字符串的文件?
【发布时间】:2011-06-05 00:41:27
【问题描述】:
我正在使用 MinGW/gcc 在 Windows 上编写 C 应用程序。我需要使用#include 指令来包含一个包含加密字符串的文件。该字符串将在运行时解密。我想这样做,因此如果使用十六进制编辑器查看可执行文件,则字符串将不可见。
我试过这个,但它不起作用。不过你明白了:
char *hidden_str =
#include "encrypted_text.dat"
其中可能有未转义的内容使编译器感到困惑。我不知道。不知道加密后会怎样。
如果有更好的方法,我愿意接受。
【问题讨论】:
标签:
c
windows
visual-studio
encryption
mingw
【解决方案1】:
如果您在安装 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]);
}
【解决方案2】:
编译器不喜欢文件中的二进制数据。
尝试这样做:
char hidden_str[] = {
65, 66, 67, ...
};
编写一个简单的程序从 .dat 文件中生成相关数据行并不难,每行字符数有限。
【解决方案3】:
将其编码为十六进制/八进制。我不确定最简单的编码方法是什么——你可以使用,例如,“\xAB\xCF...”,与八进制相同,或者你可以使用类似的数组初始化器(不要引用我的话):
char hidden_str[64] = {0xAB, 0xCf, ...};
(您甚至可以使用十进制值作为初始值设定项。)
显然,无论您做什么,都必须将加密文本预处理为十六进制表示形式——对于“玩具”程序来说,这很容易。