2

我正在处理一个密钥未知的 XNOR 加密文件。我想修改此处提供的 xortool:https ://github.com/hellman/xortool以用于 XNOR 加密。

显然,只有两行使用 '^' 运算符。所以我尝试使用 ~ 运算符将它们更改为 xnor。但我无法获得所需的输出。我怎样才能做到这一点?

编辑:代码仅在 xortool.py 的第 248 行使用 '^' 运算符

key_possible_bytes[offset] += chr(ord(char) ^ most_char)

在routine.py的第75行

 ret[index] = (chr(ord(char) ^ ord(key[index % len(key)])))

所以我在它们之前添加了一个 ~ 运算符。

4

3 回答 3

8

替换所有实例a ^ b~(a ^ b)将 XOR 操作更改为 XNOR 操作。请务必将 not 运算符插入正确的位置,以确保发生正确的操作顺序!

使用您的特定代码示例:

key_possible_bytes[offset] += chr(~(ord(char) ^ most_char))

ret[index] = (chr(~(ord(char) ^ ord(key[index % len(key)]))))

于 2013-03-09T20:56:41.053 回答
2

这个问题针对的是 Python 中的位运算符,但对于那些(像我一样)处理布尔值的人来说,上述版本的 XNOR不能按预期工作:

In [1]: for i in [True, False]:
   ...:     for j in [True, False]:
   ...:         print(i, j, ' = ', ~(i^j))
   ...: 
True True  =  -1
True False  =  -2
False True  =  -2
False False  =  -1

相反,您将要使用not而不是~

In [2]: for i in [True, False]:
   ...:     for j in [True, False]:
   ...:         print(i, j, ' = ', not (i^j))
   ...: 
True True  =  True
True False  =  False
False True  =  False
False False  =  True
于 2021-07-16T14:22:02.130 回答
1

减去最大值。

如果你是 `xoring' 8 位值,这将完成这项工作:

0xff - (0xf0 ^ 0x0f)

于 2017-07-24T22:19:28.773 回答