什么是XOR加密?

What is XOR Encryption?

我听说有人开始加密,并认为这可能是我想要的东西,所以我检查了XOR并没有任何意义。
那么有人可以向我解释什么是XOR?


您需要一个密钥,例如0101,然后使用该密钥对您的字符串(二进制格式)进行XOR运算,以获取加密的字符串。

1
2
3
4
0101 XOR <-- key
1011 <---- original message
----
1110 <-- send message

您将1110发送到您的接收器。然后,该接收者将接收到的字符串与密钥进行异或运算以获得原始消息:

1
2
3
4
1110 XOR <--- received message
0101 <-- key
----
1011 <--- original message

XOR或" exclusive or"是2操作数逻辑运算,定义为:

1
2
3
4
5
6
7
(a and b) or (not a and not b)

 a  b  result
 0  0  0
 1  0  1
 0  1  1
 1  1  0

XOR相对于加密的关键特征是可逆的,即C = A XOR B,则可以使用A = C XOR B取回A。

因此,对于纯文本流A和相同长度的密钥B,您可以生成加密文本C,并将其发送给接收者。

收件人的保险箱中有B的副本,可以对B进行C XOR或重新生成A。


XOR是逻辑运算,发音为"异或"。它可用于简单快速地对消息进行加密。您可以在此处查看此操作的真值表:http://mathworld.wolfram.com/XOR.html

准伪代码实现(通过http://www.evanfosmark.com/2008/06/xor-encryption-with-python/):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python

from itertools import izip, cycle

def xor_crypt_string(data, key):
    return ''.join(chr(ord(x) ^ ord(y)) for (x,y) in izip(data, cycle(key)))

my_data ="Hello. This is a secret message! How fun."
my_key="firefly"

# Do the actual encryption
encrypted = xor_crypt_string(my_data, key=my_key)

print encrypted
print '---->'

# This will obtain the original data from the encrypted
original = xor_crypt_string(encrypted, key=my_key)

print original

输出:

1
2
3
4
5
.     BY2F
FRR
DF$IB
---->
Hello. This is a secret message! How fun.

我写了一个有关XOR加密的博客,网址为http://programmingconsole.blogspot.in/2013/10/xor-encryption-for-alphabets.html

从数学上讲,XOR加密/密码是加法,这是一种加密算法,可根据以下原理进行操作:

1
2
3
4
5
6
7
(A * B) + (!A * !B)

 A  B  A XOR B
 0  0     0
 1  0     1
 0  1     1
 1  1     0

xor运算符就像AND(*)和OR(+)运算符
要解密密码,我们只需要对密码与密钥进行异或操作即可重新获得原始文本。
XOR运算符是复杂加密算法中极为常见的组件。
通过使用恒定的重复密钥并使用频率分析,可以很容易地破坏这种加密。
但是我们在每次加密破解后都更改密钥,这种加密在计算上非常困难
这样的密码称为流密码,其中每个下一个比特使用不同的伪随机密钥加密,德国人在其Lorentz密码中使用了这种加密方式。

通过使用真正随机的密钥流,密码在理论上是不可破解的,因此无法使用

我建议你看

BBC: Code Breakers Bletchley Parks lost Heroes documentary

它将为您提供有关加密和加密位世界的真正见解。密码学有多重要?嗯,这是计算机发明的原因。


在最简单的级别上,可逆操作(例如XOR)(发音为"异或")构成了大多数密码学的基础。

XOR就像拨动开关一样,您可以在其中打开和关闭特定位。如果要"加扰"一个数字(一种位模式),可以将它与一个"秘密"数字异或。如果您使用该加扰的编号,然后使用相同的密码再次对其进行异或运算,那么您将获得原始编号。

1
2
3
4
5
6
7
8
Encrypt a number (210) with a secret"key" (145).

                  210 XOR 145 <sub>gives you</sub> 65   -- your"scrambled" result
                                      |
                  +   now unscramble it   +
                  |
                 
                  65  XOR 145 <sub>gives you</sub> 210  -- and back to your original number

这是一个非常简单的例子。使用XOR加密数字序列(或文本或任何位模式)时,您将拥有非常基本的密码算法。


应当指出,几乎不能认为这种加密方法是安全的。如果您对标头众所周知的任何通用文件(PNG,JPG等)进行加密,则可以轻松地从加密内容和已知标头中获取密钥。


XOR是" exclusive or"的缩写。如果A为true或B为true,则XOR B为true,但如果A和B都为true,则异或。

它用于加密,因为A XOR B XOR A等于B-因此,如果可以将A用作加密和解密的密钥。


XOR加密也可用于密码块链接。 XOR CBC被用作许多加密实现的补充。尽管单独进行XOR并不十分安全,但有一个Google代码项目可以单独使用此代码:http://code.google.com/p/xorencryption/