c - 如何更改代码以加密而不是解密文件?

标签 c encryption fwrite

我使用下面包含的代码解密了一些图形文件。我想修改它以便它可以再次加密它们。不幸的是,我是一名平面设计师,我只有非常基本的编程知识(而不是 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/

相关文章:

c++ - 在 C/C++ 中检测有符号溢出

c++ - C 或 C++ 和 Linux 中的屏幕捕获程序

控制多个 child ,处理 sigchild

c - strcspn 中的 "c"代表什么?

java - Jackcess:MSAccess 数据库的字符集错误

php - 字段不是实体的有效字段 - DoctrineEncryptBundle Symfony

networking - 使用 bufio.NewReader(conn) 阅读整条消息

c++ - 在 C/C++ 中将十六进制数组作为字符串写入文件

c - 如何在结构中 fwrite() 两种不同类型的变量?

c - 如何尽可能快地输出固定缓冲区?