我正在使用MinGW / gcc在Windows上编写C应用程序。我需要使用#include指令来包含一个包含加密字符串的文件。该字符串将在运行时解密。我想这样做,所以如果用十六进制编辑器查看可执行文件,字符串将不可见。
我试过这个,但它没有用。但是你明白了这个想法:
char *hidden_str =
#include "encrypted_text.dat"
那里可能存在未转义的内容,令编译器感到困惑。我不知道。我不知道加密后会发生什么。
如果有更好的方法,我可以接受它。
答案 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, ...};
(您甚至可以使用初始化程序的十进制值。)
显然,无论你做什么,你都必须将加密文本预处理成十六进制表示 - 这对于“玩具”程序来说很容易。