我使用的是python2.7.6。我在研究crib-dragging method of the many time pad attack。文章作者说,将消息和键定义为:
message = "Hello World"
key = "supersecret"
我需要XOR
这两个字符串的二进制值来得到我的密文。我知道我可以确定字符串十六进制值的字符串表示形式,如下所示:
hexMessage = message.encode("hex")
hexKey = key.encode("hex")
但是,hexMessage
和hexKey
仍然是字符串。如果我想对它们执行(python原生)XOR
(如果我弄错了,请纠正我),我相信我需要它们是整数文本。换句话说,我想按照cipherText = hexMesage ^ hexKey
的思路做一些事情。你知道吗
如果我print hexMessage, hexKey
,我得到:
48656c6c6f20576f726c64 7375706572736563726574
如果我尝试XOR
这些值,我显然会得到一个错误:TypeError: unsupported operand type(s) for ^: 'str' and 'str'
。这对我来说并不奇怪,因为我知道这些是十六进制值的字符串表示。我可以做到:
realHexMessage = 0x48656c6c6f20576f726c64
realHexKey = 0x7375706572736563726574
cipherText = realHexMessage ^ realHexKey
不幸的是,我使用copy paste从终端获取hexMessage和hexKey的字符串值,然后在python脚本中用0x
作为它们的前缀,以获取可以XOR
编辑的文本值。显然,我这样做是非常错误的。你知道吗
我的问题是:有什么快速的方法可以将我的message
和key
字符串变量转换成它们的文本等价物,这样我就可以使用^
操作符XOR
它们了?你知道吗
据我所知,Python中没有直接的方法,但是下面的内容应该可以满足您的需要。你知道吗
基本上,它使用
ord
将字符串中的每个字符转换为一个数字字节,然后将其格式化为十六进制,将十六进制字符连接在一起,并将其解析为int
。你知道吗输出:
相关问题 更多 >
编程相关推荐