我试图在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 ?????。或者还有更好的方法?任何关于此的亮点都将非常感激!
答案 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 = 0x61
,b = 0x62
,c = 0x63
和d = 0x64
。将这些全部放在一起就可以得到abcd = 0x61626364
。