簡體   English   中英

如何#include 包含加密字符串的文件?

[英]How can I #include a file with encrypted string?

我正在使用 MinGW/gcc 在 Windows 上編寫 C 應用程序。 我需要使用#include 指令來包含一個包含加密字符串的文件。 該字符串將在運行時解密。 我想這樣做,因此如果使用十六進制編輯器查看可執行文件,則字符串將不可見。

我試過這個,但它不起作用。 不過,你明白了:

char *hidden_str =
#include "encrypted_text.dat"

那里可能有未轉義的東西使編譯器感到困惑。 我不知道。 不知道加密后會發生什么。

如果有更好的方法,我願意接受。

如果您在安裝 MinGW 時安裝並配置了 MSYS,您應該可以訪問名為xxd的命令,該命令獲取文件的十六進制轉儲。 通過使用-i命令行標志,您可以將其轉換為 output 一個可以輕松導入的 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, ...};

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

顯然,無論你做什么,你都必須將加密文本預處理成十六進制表示——對於“玩具”程序來說,這很容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM