[英]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.