如何使用字符串XOR文字

时间:2015-04-25 19:57:32

标签: python python-3.x

我试图在Python中实现Blowfish算法。我理解它的方式,我必须使用像" abcd"然后用十六进制数组对其进行异或(必要时循环键)

P = (
      0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,
      0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
      0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b,
    )

这里的数据类型让我非常困惑。我在某个地方看到了#abcd' = 0x61626364。在这种情况下,异步P的第一个元素就是0x61626364 ^ 0x243f6a88。

那么,我该如何转换像' abcd'格式为0x ?????。或者还有更好的方法?任何关于此的亮点都将非常感激!

2 个答案:

答案 0 :(得分:3)

将字符串转换为字节数组:

b = bytes('abcd', 'ascii')

将字节数组转换为int:

i = int.from_bytes(b, byteorder='big', signed=False)

答案 1 :(得分:3)

两个十六进制数字只能编码一个字节。这是有道理的,因为每个十六进制数字可以处于16个不同的状态,因此两个十六进制数字可以处于16 * 16 = 256个不同的状态,这与单个字节中可表示的状态数完全相同。

由于ASCII字符可以在一个字节中编码,因此任何ASCII字符都可以编码为两个十六进制数字。

例如,字母a在ASCII中包含字符代码97。将十进制数97转换为基数16(十六进制)可为您提供0x61

因此,您可以获取任何字符串并将其转换为十六进制数字,方法是将每个字符转换为数字中的两个十六进制数字。查看上面的示例,a = 0x61b = 0x62c = 0x63d = 0x64。将这些全部放在一起就可以得到abcd = 0x61626364

的表示形式