我可以将两个字符串散列为一个散列吗?
Can I hash two strings into one hash?
我是 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')
只需连接两个字符串然后对其进行哈希处理。
当我正在寻找关于同一主题的建议时,请对此发表评论:
- 连接两个字符串并进行散列不一定是个好主意,因为很容易发生冲突:
"hello", "world"
将具有与 "hel", "loworld"
. 相同的散列
- 如果你很了解你的字符串,你可以找到一个简洁的分隔符来避免这种情况。
- 另一种选择是在连接之前预先添加每个字符串的大小,这样您最终会散列
"5hello5world"
和 "3hel8loworld"
,并且不太可能产生冲突。
- 如果你只想实现
__hash__
,你可以 hash(hash(a) + hash(b))
。
我是 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')
只需连接两个字符串然后对其进行哈希处理。
当我正在寻找关于同一主题的建议时,请对此发表评论:
- 连接两个字符串并进行散列不一定是个好主意,因为很容易发生冲突:
"hello", "world"
将具有与"hel", "loworld"
. 相同的散列
- 如果你很了解你的字符串,你可以找到一个简洁的分隔符来避免这种情况。
- 另一种选择是在连接之前预先添加每个字符串的大小,这样您最终会散列
"5hello5world"
和"3hel8loworld"
,并且不太可能产生冲突。 - 如果你只想实现
__hash__
,你可以hash(hash(a) + hash(b))
。