我使用下面的代码来解密一些图形文件。我想修改它,以便它可以再次加密它们。不幸的是,我是一名平面设计师,而且我只有非常基本的编程知识(而不是C语言)所以我不理解这个代码的水平允许我自己修改它。
#include <stdio.h>
int main (int argc, char **argv)
{
FILE *inp, *outp;
int i;
char sig[] = "CF10", *ptr;
if (argc != 3)
{
printf ("usage: decode [input] [output]\n");
return -1;
}
inp = fopen (argv[1], "rb");
if (inp == NULL)
{
printf ("bad input file '%s'\n", argv[1]);
return -2;
}
ptr = sig;
while (*ptr)
{
i = fgetc (inp);
if (*ptr != i)
{
printf ("input file sig is not 'CF10'\n");
return -2;
}
ptr++;
}
outp = fopen (argv[2], "wb");
if (outp == NULL)
{
printf ("bad output file '%s'\n", argv[1]);
return -2;
}
do
{
i = fgetc(inp);
if (i != EOF)
fputc (i ^ 0x8d, outp);
} while (i != EOF);
fclose (inp);
fclose (outp);
printf ("all done. bye bye\n");
return 0;
}
答案 0 :(得分:3)
这充其量只能被描述为模糊内容。它使用'xor'加密,其中一个优点就是自解密。
您可以在未加密的文件上运行代码并获取加密文件,也可以在加密文件上运行并获取未加密的文件。
我误读了代码;抱歉。您的代码读取CF10幻数,然后在xor之后写入其余数据; CF10告诉它它被遮挡了。要隐藏未显眼的数据,您应该将CF10幻数写入输出文件,然后读取输入并将其写入并写入。精炼版本的代码将测试文件的前四个字节(与CF10相等),以确保您不会重新模糊并且已经模糊了文件。
您可能需要处理一个选项参数,该参数确定是加密还是解密(隐藏或隐藏)。或者,您可以使用文件的前四个字节来告诉您是加密还是解密。
请注意,原始答案的基本点 - xor加密和解密基本上是相同的操作 - 仍然有效。