XOR 密钥:
0
  • 字符编码:
  • 格式:
    (格式加密表示输出,解密表示输入)
0

说明

XOR:eXclusive OR 的缩写,逻辑运算中除了 AND 和 OR,还有一种 XOR 运算,中文称为“异或运算”。它的定义是:两个值相同时返回 false,否则返回 true。

true XOR true = false
false XOR false = false
true XOR false = true
false XOR true = true

XOR 运算有一个很重要的特点:如果对一个值连续做两次 XOR,会返回这个值本身。

// 第一次 XOR
1010 XOR 1111 = 0101
// 第二次 XOR
0101 XOR 1111 = 1010

正是这个特点,使得 XOR 可以用于信息的加密。加密和解密使用完全相同的过程:把输入字节和密钥字节按顺序循环做异或即可。

如果密钥长度大于等于消息长度,并且密钥只使用一次且完全随机,那么 XOR 可以构成 one-time pad(一次性密码本),具备理论上的完美保密性。当前页面则实现的是常见的“循环密钥异或”。


密钥(偏移)Text 和 Hex
  • Text 表示是文本格式,加密前会使用 UTF-8 编码,把它转成 byte[] 数组
  • Hex 表示是十六进制格式,加密前会把十六进制字符串转成 byte[] 数组
字符编码与格式 加密说明
  • 第一种情况,以 XOR 加密为例,密钥下拉框选择“Text”,输入“key”,加密字符串“中国abc”,字符编码选择“UTF-8”,表示字符串“中国abc”加密前会以“UTF-8”编码成 byte[] 数组, 加密的输出是十六进制,格式下拉框选择“Hex”,加密的输出结果就是“E4B890E59BBD616263”。 查看示例
  • 另外一种情况,还是以 XOR 加密为例,密钥下拉框选择“Text”,输入“key”,加密的不是字符串,而是十六进制数据,比如是 [0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08], 字符编码必须要选择“Hex”,表示加密前,不需要编码了,十六进制数据可以直接转成字节数组,加密的输出是 Base64,格式下拉框选择“Base64”,加密的输出结果就是“a2V5a2V5a2V5a2V5”。 查看示例
字符编码与格式 解密说明
  • 第一种情况,以 XOR 解密为例,密钥下拉框选择“Text”,输入“key”,解密第一种情况加密输出的十六进制字符串“E4B890E59BBD616263”,所以格式下拉框选择“Hex”,解密之后的数据编码是“UTF-8”,所以字符编码选择“UTF-8”,解密后的字符串是“中国abc”。 查看示例
  • 另外一种情况,还是以 XOR 解密为例,密钥下拉框选择“Text”,输入“key”,解密第二种情况加密输出的 Base64 字符串“a2V5a2V5a2V5a2V5”,所以格式下拉框选择“Base64”,解密之后的数据没有任何编码,是十六进制数据, 所以字符编码选择“Hex”(如果你选择“UTF-8”,肯定会乱码),最后解密后的字符串是“0102030405060708”。 查看示例