如何从 Python 中的文件中生成哈希值

How to salt a generated hash from a file in Python

问题

我编写了一个函数来对上传的文档进行签名。为了增加函数的安全性,我想给它加一个SALT。当我读取上传文件的字节时,我想我必须以某种方式添加或附加它?

代码

这是我目前拥有的没有 SALT 的(工作)功能:

def sign(file):
    with open(private_key_path, 'rb') as f:
        key = f.read()
    hash = SHA256.new(file.read())
    # do signing stuff
    return signature

之后我尝试更新散列,但那不起作用:

SALT = "random string";
def sign(file):
    with open(private_key_path, 'rb') as f:
        key = f.read()
    h = SHA256.new(file.read())
    hash = h.update(str.encode(SALT))
    # do signing stuff
    return signature

我该如何解决这个问题?有没有合适的标准方法来做到这一点?

试试这个:

SALT = "random string";
def sign(file):
    with open(private_key_path, 'rb') as f:
        key = f.read()
    hash = SHA256.new(file.read())
    hash.update(str.encode(SALT))
    # do signing stuff
    return signature

根据hashlib官方文档:

hash.update(data) updates the hash object with the bytes-like object (data).

这意味着SHA256.new()实际上创建了一个python对象,而.update()是这个python对象的一个​​方法,它更新对象的属性。它没有 return 任何东西,因此不会将任何内容存储在第二个代码的 hash 变量中。

要了解更多信息,请查看此answer