我正在尝试用Python实现Blowfish算法。我想我对算法有一个相当好的总体理解,但是一些实现细节让我不知所措。你知道吗
该算法包含一个十六进制数组
#Note: I shortened the 18 element array for this example
PI_P_ARRAY = (0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344)
还有一把秘密钥匙
key = 'mysecret'
在Wikipedia中,“密钥是一个字节一个字节地循环密钥,如果必要的话,将所有p项按顺序进行XORed。”我如何在Python中实现这一点?你知道吗
到目前为止,我甚至不能将密钥转换为十六进制!更不用说把它循环成一个十六进制数组,我可以用P数组进行异或。。。你知道吗
#Failed attempts to convert key to hex
import binascii
binascii.hexlify(key)
key.encode('hex')
bytearray(key)
PI_P_ARRAY
数组只是一个使用十六进制文字的整数数组,因此我认为您不必为此而使用十六进制。相反,将密钥转换为整数序列。最简单的方法是使用类似bytearray
的bytearray(key, "utf-8")
。然后,您可以按如下方式压缩列表:itertools.cycle
将对key
的整个长度重复PI_P_ARRAY
。然后,您可以创建一个列表来给出XORed值,如下所示:这会给您一个
list
的int
。或者,使用地图:请注意,这将为您提供一个生成器,如果您处理大量数据,它将使用较少的内存。你知道吗
相关问题 更多 >
编程相关推荐