【问题标题】: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 文件中生成相关数据行并不难,每行字符数有限。

    【讨论】:

    • xdxxd 可以生成这些类型的文件。
    【解决方案3】:

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

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

    (您甚至可以使用十进制值作为初始值设定项。)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多