我听说有人开始加密,并认为这可能是我想要的,所以我检查了 XOR 并无法理解它。那么有人可以向我解释 XOR 是什么吗?
8 回答
您获取一个密钥,例如 0101,然后使用该密钥对您的字符串(二进制格式)进行异或运算以实现加密字符串。
0101 XOR <-- key
1011 <---- original message
----
1110 <-- send message
您将 1110 发送给您的接收者。该接收者然后将接收到的字符串与密钥进行异或以获得原始消息:
1110 XOR <--- received message
0101 <-- key
----
1011 <--- original message
XOR 或“异或”是 2 个操作数的逻辑运算,定义为:
(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 的副本,可以执行 C XOR B 并重新生成 A。
XOR 是一种逻辑运算,发音为异或。它可用于简单快速地加密消息。您可以在此处查看此操作的真值表:http: //mathworld.wolfram.com/XOR.html
准伪代码实现(通过http://www.evanfosmark.com/2008/06/xor-encryption-with-python/):
#!/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
输出:
. BY2F
FRR
DF$IB
---->
Hello. This is a secret message! How fun.
在最简单的层面上,诸如 XOR(发音为“异或”)之类的可逆运算构成了大多数密码学的基础。
XOR 就像一个拨动开关,您可以在其中打开和关闭特定位。如果你想“打乱”一个数字(一种位模式),你可以用一个“秘密”数字对它进行异或。如果你把那个加扰的号码和相同的密码再次异或,你会得到你原来的号码。
用秘密“密钥”(145)加密一个数字(210)。 210 XOR 145 给你65 ←--你的“加扰”结果 |+ 现在解读它 +| ↓ 65 XOR 145 给你210 ←--并返回你原来的数字
这是一个非常初级的例子。当您使用 XOR 加密数字序列(或文本或任何位模式)时,您就有了一个非常基本的密码算法。
我写了一篇关于异或加密的博客http://programmingconsole.blogspot.in/2013/10/xor-encryption-for-alphabets.html
在数学上,XOR 加密/密码是加法密码,一种根据以下原则运行的加密算法:
(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 即可重新获得原始文本。XOR 运算符是复杂加密算法中极为常见的组件。通过使用恒定重复密钥和使用频率分析,可以很容易地破解这种加密。但是我们在每次加密后更改密钥,这种加密在计算上非常困难,这种密码称为流密码,其中每个下一位都使用不同的伪随机密钥加密,这种加密被德国人在他们的 Lorentz 中使用密码。
通过使用真正随机*的密钥流,密码理论上是牢不可破的,因此无法使用
我会推荐你看
英国广播公司:密码破解者布莱切利公园失去了英雄纪录片
它将让您真正了解密码学和加密位的世界。密码学有多重要?嗯,这就是计算机发明的原因。
XOR 是“异或”的缩写。如果 A 为真,或者 B 为真,则 A XOR B 为真,但如果 A 和 B 都为真,则不是。
它用于加密,因为 A XOR B XOR A 等于 B - 所以如果您可以使用 A 作为加密和解密的密钥。
应该注意的是,这种加密方法很难被认为是安全的。如果您对标头众所周知的任何常见文件(PNG、JPG 等)进行加密,则可以轻松地从加密内容和已知标头中导出密钥。
XOR 加密也可用于密码块链接。XOR CBC 被用作许多加密实现的补充。有一个谷歌代码项目可以自己使用它,尽管单独的 XOR 不是很安全:http ://code.google.com/p/xorencryption/