字符XOR与插入符号操作

时间:2010-07-06 20:40:13

标签: c++ c bit-manipulation xor caret

对比特使用异或是我很清楚的事情。但在这里,XOR正致力于个性化角色。那么这是否意味着构成角色的字节正在被异或?这看起来像什么?

#include <iostream.h>
int main()
{
  char string[11]="A nice cat";
  char key[11]="ABCDEFGHIJ";
  for(int x=0; x<10; x++)
  {
    string[x]=string[x]^key[x];
    cout<<string[x];
  }
  return 0;
}

我知道XORed的位看起来像这样:
    1010
    1100
    的 0110

5 个答案:

答案 0 :(得分:7)

XOR具有很好的属性,如果您使用相同的数据对某些东西进行两次异或,则可以获得原始属性。您发布的代码是一些基本的加密函数,它使用密钥“加密”字符串。得到的密文可以通过相同的程序进行解密。

答案 1 :(得分:5)

在C和C ++中,字符串通常以8位字符值存储在内存中,其中存储的值是字符的ASCII值。

因此,您的代码会对ASCII值进行异或。例如,输出中的第二个字符计算如下:

  'B' ^ ' '
= 66 ^ 32
= 01000010 ^ 00100000
= 01100010
= 98
= 'b'

如果您在使用EBCDIC而非ASCII的系统上运行此代码,则可能会得到不同的结果。

答案 2 :(得分:2)

xor on字符对两个字符的每个对应位执行xor操作(每个字符一个字节)。

答案 3 :(得分:2)

这是否意味着构成字符的字节正在被异或?

完全。

这是什么样的?

和其他任何XOR一样:)。在ASCII中“一只漂亮的猫”是(十六进制)

41 20 6E 69 63 65 20 63 61 74

和ABCDEFGHIJ

41 42 43 44 45 46 47 48 49 4A

所以,如果你把每个字节相互异或,你得到

00 62 2D 2D 26 23 67 2B 28 3E

,这是“\ 0b - &amp; #g +(&gt;”)的十六进制表示,即运行该代码时显示的字符串。

请注意,如果您再次对结果文本进行异或,则会返回您开始使用的文本;这就是XOR经常用于编码和加密的原因。

答案 4 :(得分:0)

这是一次性填充加密的简单演示,您可以看到它非常简单,并且恰好是唯一可证明不可破解的加密形式。由于它是对称的并且具有与消息一样大的密钥,它通常不实用,但它仍然有许多有趣的应用程序..: - )

如果您还不熟悉它,有一件有趣的事情是密钥和密文之间的对称性。在生成它们之后,没有区别哪个是哪一个,即哪个是首先创建的,哪个是基于与另一个xor'd的明文。除了基本加密之外,这也会导致应用程序看似合理。