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/