我使用下面包含的代码解密了一些图形文件。我想修改它以便它可以再次加密它们。不幸的是,我是一名平面设计师,我只有非常基本的编程知识(而不是 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;
}
最佳答案
充其量,这可以被描述为模糊内容。它使用“异或”加密,其优点之一是可以自解密。
您可以在未加密文件上运行代码并获得加密文件,或在加密文件上运行代码并获得未加密文件。
我看错了代码;对不起。您的代码读取 CF10 魔数(Magic Number),然后在异或后写入其余数据; CF10 告诉它它被遮挡了。要隐藏未隐藏的数据,您应该将 CF10 魔数(Magic Number)写入输出文件,然后读取输入并对它进行异或并写入。代码的改进版本将测试文件的前四个字节(是否与 CF10 相等)以确保您不会重新模糊和已经模糊的文件。
您可能需要处理一个选项参数,该参数决定是加密还是解密(模糊或非模糊)。或者,您可以使用文件的前四个字节来告诉您是加密还是解密。
请注意,原始答案的基本要点——异或加密和解密从根本上讲是相同的操作——仍然有效。
关于c - 如何更改代码以加密而不是解密文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26512545/