【问题标题】:What is XOR Encryption?什么是异或加密?
【发布时间】:2011-01-03 00:28:00
【问题描述】:

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

【问题讨论】:

标签: encryption xor


【解决方案1】:

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。

【讨论】:

  • 如果 B 只使用一次,那么这是一次性加密,是唯一一种理论上牢不可破的加密。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      XOR 是一种逻辑运算,读作exclusive or。它可用于简单快速地加密消息。您可以在此处查看此操作的真值表: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.
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 其实还是要看实现的。如果您的密钥长度小于消息长度,则密钥将被重复并且可以派生。如果密钥长度与消息长度相同,并且您从不使用相同的密钥两次,那么您基本上拥有一个无法破解的一次性密码。
        • 但是,您必须找到一种将密钥安全地传输给收件人的方法——如果您能做到这一点,您就可以使用该安全通道发送消息。 (因此为什么 OTP 在现实世界中没有被大量使用)。
        【解决方案6】:

        在最简单的层面上,XOR(发音为“异或”)等可逆运算形成foundation of most cryptography。

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

        使用秘密“密钥” (145) 加密数字 (210)。 210 XOR 145 给你 65 ←-- 你的“加扰”结果 | + 现在解读它 + | ↓ 65 XOR 145 给你 210 ←-- 回到你原来的数字

        这是一个非常初步的例子。当您使用 XOR 加密数字序列(或文本或任何位模式)时,您会得到一个 very basic cipher algorithm。

        【讨论】:

        • 并不是真正的 all 密码学的基础,因为分组密码有几种模式,例如 ECB、OFB 和 CFB,它们从不进行单一 XOR。此外,任何可逆运算都可以代替 XOR,例如 mod 256 加法/减法作为一个常见示例。
        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

          我写了一篇关于异或加密的博客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 运算符是复杂加密算法中极为常见的组件。 通过使用恒定的重复密钥和使用频率分析,可以很容易地破解这种加密。 但是我们在每次加密后更改密钥,这样的加密在计算上是非常困难的 这种密码称为流密码,其中每个下一位都使用不同的伪随机密钥进行加密,德国人在他们的洛伦兹密码中使用了这种加密。

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

          推荐大家观看

          BBC:密码破解者布莱切利公园迷失英雄纪录片

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-02-06
            • 2011-09-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-04
            相关资源
            最近更新 更多