16

我听说有人开始加密,并认为这可能是我想要的,所以我检查了 XOR 并无法理解它。那么有人可以向我解释 XOR 是什么吗?

4

8 回答 8

27

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

0101 XOR <-- key
1011 <---- original message
----
1110 <-- send message

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

1110 XOR <--- received message
0101 <-- key
----
1011 <--- original message
于 2010-01-08T17:38:43.177 回答
11

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。

于 2010-01-08T17:38:04.970 回答
6

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.
于 2010-01-08T17:40:00.910 回答
2

在最简单的层面上,诸如 XOR(发音为“异或”)之类的可逆运算构成了大多数密码学的基础

XOR 就像一个拨动开关,您可以在其中打开和关闭特定位。如果你想“打乱”一个数字(一种位模式),你可以用一个“秘密”数字对它进行异或。如果你把那个加扰的号码和相同的密码再次异或,你会得到你原来的号码

用秘密“密钥”(145)加密一个数字(210)。

                  210 XOR 145 给你65 ←--你的“加扰”结果
                                      |
                  +   现在解读它   +
                  |
                  ↓
                  65   XOR 145 给你210 ←--并返回你原来的数字

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

于 2010-01-08T17:41:46.710 回答
2

我写了一篇关于异或加密的博客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 中使用密码。

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

我会推荐你​​看

英国广播公司:密码破解者布莱切利公园失去了英雄纪录片

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

于 2013-10-19T19:14:23.667 回答
1

XOR 是“异或”的缩写。如果 A 为真,或者 B 为真,则 A XOR B 为真,但如果 A 和 B 都为真,则不是。

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

于 2010-01-08T17:40:00.443 回答
1

应该注意的是,这种加密方法很难被认为是安全的。如果您对标头众所周知的任何常见文件(PNG、JPG 等)进行加密,则可以轻松地从加密内容和已知标头中导出密钥。

于 2010-01-08T17:41:19.207 回答
0

XOR 加密也可用于密码块链接。XOR CBC 被用作许多加密实现的补充。有一个谷歌代码项目可以自己使用它,尽管单独的 XOR 不是很安全:http ://code.google.com/p/xorencryption/

于 2010-01-08T18:07:14.490 回答