8192位XOR加密?

时间:2013-09-11 11:42:06

标签: c++ c encryption

如果我有一个包含1024个字符的字符串和一个简单的xor算法,它仍然很容易破解?

const unsigned char Key[1024] = {0x.........};

void EncodeBuffer(unsigned char Buffer[],unsigned int Size) {
    unsigned int i = 0,c = 0;
    while (i < Size) {
         while(c < 1024)
              Buffer[i] ^= Key[c++];
         i++;
         c = 0;
    }
}

1 个答案:

答案 0 :(得分:4)

首先,你的算法不会做你认为它做的事情。您最终将Buffer的每个字节与Key的每个字节进行xoring,这实际上意味着您使用相同的字节对Buffer的每个字节进行xoring。你可能的意思是这样的:

const unsigned char Key[1024] = {0x.........};

void EncodeBuffer(unsigned char Buffer[],unsigned int Size) {
    unsigned int i = 0;
    while (i < Size) {
        //Each byte of the buffer is xor'd with a byte of the key
        //Each byte of the key may be used for more than one byte in the buffer (insecure)
        Buffer[i] ^= Key[i % 1024];
        i++;
    }
}

现在,这是更安全,但对现实世界来说还不够安全。使用此加密越多,攻击者就越容易猜到密钥。此外,如果攻击者可以看到源代码(甚至编译的二进制代码),他们将拥有密钥。

您可能需要的是one-time pad,它至少需要输入密钥。

顺便说一句,如果您尝试将其编写为在任何真实情况下使用,我建议您不要使用现有的加密库。这个东西很难做到,而且有足够多的人在努力解决这个问题,最好是为自己(更不用说客户)节省处理错误加密的麻烦。