对C中的十六进制常量的无符号整数进行异或

时间:2017-02-03 00:41:02

标签: c file cryptography xor

考虑以下用于强制加密系统的C实现的片段,其中最值得注意的是密文的前四个字节(包含在value中)与明文.png文件的前四个字节进行异或:

void brute_force_png()
{
    FILE *file = NULL;
    unsigned int value = 0;
    unsigned int key = 0;

    file = fopen("output", "r");

    if(file == NULL)
    {
        printf("File cannot be opened\n");
        return;
    }

    fread(&value, 4, 1, file);
    fread(&value, 4, 1, file);

    fclose(file);

    key = value ^ 0x474E5089;

    printf("key = 0x%x\n", key);

    decrypt(key, 0);
}

我特别感兴趣的是:

key = value ^ 0x474E5089;

在强制加密的密码系统中,我们知道用明文的前四个字节(在这种情况下明文是.png文件)对密钥进行异或运算给出了密文的前四个字节。现在,根据几个在线资源,任何.png文件的“幻数”(即前四个字节)是(十六进制)0x89504E47。那么,为什么上述行不应该被替换为:

key = value ^ 0x89504E47;

这与读取文件的方式有关吗?

0 个答案:

没有答案