我想散列一个简单的字符串数组
文档说你不能简单地将一个字符串输入到 hashlib 的 update() 函数中,
所以我尝试了一个常规变量,但后来我收到了 TypeError: object supporting the buffer API required
错误。
这是我到目前为止所拥有的
def generateHash(data):
# Prepare the project id hash
hashId = hashlib.md5()
hashId.update(data)
return hashId.hexdigest()
最佳答案
您可以使用 repr()
函数来获取数组(或实现转换为表示的任何对象)的(Unicode)字符串表示。然后将字符串编码为 UTF-8(使用 UTF-8 时,字节顺序在任何地方都相同)。可以按照上面的尝试对结果字节进行散列:
#!python3
import hashlib
def hashFor(data):
# Prepare the project id hash
hashId = hashlib.md5()
hashId.update(repr(data).encode('utf-8'))
return hashId.hexdigest()
if __name__ == '__main__':
data1 = ['abc', 'de']
data2 = ['a', 'bcde']
print(hashFor(data1) + ':', data1)
print(hashFor(data2) + ':', data2)
它打印在我的控制台上:
c:\tmp\___python\skerit\so17412304>py a.py
d26d27d8cbb7c6fe50637155c21d5af6: ['abc', 'de']
dbd5ab5df464b8bcee61fe8357f07b6e: ['a', 'bcde']