什么原因导致XOR加密返回"空白"?

d0r*_*ife 1 c encryption

使用XOR加密时某些字符为空的原因是什么?此外,如何在解密时对此进行补偿?

例如:

....
void basic_encrypt(char *to_encrypt) {
    char c;
    while (*to_encrypt) {
        *to_encrypt = *to_encrypt ^ 20;
        to_encrypt++;
    }
}
Run Code Online (Sandbox Code Playgroud)

将为角色返回"无" k.显然,字符衰减对于解密是有问题的.

我假设这是由位运算符引起的,但我对二进制文件不是很好,所以我想知道是否有人可以解释.

k在这种情况下,它是否将一个元素转换为一些无空格的ASCII字符?可以通过选择y <x <z运算符来补偿吗,其中x是运算符?

最后,如果它没有得到补偿,除了猜测和检查之外,还有一个真实的解密策略来填补空白吗?

Dan*_*her 6

'k'具有ASCII值107 = 0x6B.20是的0x14,所以

'k' ^ 20 == 0x7F == 127
Run Code Online (Sandbox Code Playgroud)

如果您的字符集与ASCII兼容.127\DELASCII格式,这是一个不可打印的字符,因此如果将其打印出来将不会显示.

  • 我不确定你的意思是"消息无法以明文形式传递".如果对邮件进行XOR加密,则加密邮件通常包含一些不可打印的字符.因此,您无法将其打印出来并在其他地方将其读回以解密并获取原始文件,加密为不可打印字符的字符将丢失.但是你可以打印出例如角色的十六进制表示.这些可以被解析和解密而不会丢失.或者您可以将字节流(需要一个长度,因为某些字符加密为0)作为字节发送. (2认同)