我可以将两个字符串哈希为一个哈希吗?

Jos*_*hua 5 python hash sha256

我对 Python 还很陌生,想要创建一些将两个字符串哈希在一起的代码。特别是对于我的情况,我想对文件的哈希值和比特币块哈希值进行哈希处理。下面的代码显然不起作用,因为 sha256() 仅接受一个参数。你们知道这件事吗?

谢谢,

from __future__ import print_function
import blocktrail, time, csv, hashlib, sys

client = blocktrail.APIClient(api_key="x", api_secret="x", network="BTC", testnet=False)
address = client.address('x')

latest_block = client.block_latest()
hash_list = []
h = latest_block['hash']
sha256 = hashlib.sha256()
BUF_SIZE = 65536
print("test")

with open('entries#x.csv', 'rb') as entriesfile:
    buf = entriesfile.read(BUF_SIZE)
    while len(buf) > 0:
        sha256.update(buf)
        buf = entriesfile.read(BUF_SIZE)
    print(sha256.hexdigest())

entryhash = sha256.hexdigest()

hashofhe = hashlib.sha256(b'entryhash', 'h')
Run Code Online (Sandbox Code Playgroud)

YBa*_*iss 11

只是对此发表评论,因为我正在寻找有关同一主题的建议:

  • 连接两个字符串并进行散列不一定是个好主意,因为很容易发生冲突:"hello", "world"将具有与 相同的散列"hel", "loworld"
  • 如果您很了解字符串,则可以找到一个简洁的分隔符来避免这种情况。
  • 另一种选择可能是在连接之前预先考虑每个字符串的大小,这样您最终会进行散列"5hello5world""3hel8loworld"并且不太可能产生冲突。
  • 如果你只想实施__hash__,你就可以做到hash(hash(a) + hash(b))


Alm*_*lmo 1

只需连接两个字符串然后对其进行散列即可。