我想散列一个简单的字符串数组
文档说你不能简单地将一个字符串输入到 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']

10-04 21:05