哈希函数示例
本节给出几个使用 Python 计算密码学哈希函数的示例。
在 Python 中计算密码学哈希函数
这里使用 Python 标准库 hashlib。待哈希的输入数据必须以字节序列(bytes 对象)提供,因此需要使用某种文本编码(如 utf8)对输入字符串进行编码。生成的输出数据也是字节序列,可以像下面这样使用 binascii.hexlify() 将其打印为十六进制数字:
import hashlib, binascii
text = 'hello'
data = text.encode("utf8")
sha256hash = hashlib.sha256(data).digest()
print("SHA-256: ", binascii.hexlify(sha256hash))
sha3_256 = hashlib.sha3_256(data).digest()
print("SHA3-256: ", binascii.hexlify(sha3_256))
blake2s = hashlib.new('blake2s', data).digest()
print("BLAKE2s: ", binascii.hexlify(blake2s))
ripemd160 = hashlib.new('ripemd160', data).digest()
print("RIPEMD-160:", binascii.hexlify(ripemd160))
运行上述代码示例:https://repl.it/@nakov/Hashes-SHA2-SHA3-BLAKE2-RIPEMD-in-Python。
上述示例的预期输出如下:
SHA-256: b'2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824'
SHA3-256: b'3338be694f50c5f338814986cdf0686453a888b84f424d792af4b9202398f392'
BLAKE2s: b'19213bacc58dee6dbde3ceb9a47cbb330b3d86f8cca8997eb00be456f140ca25'
RIPEMD-160: b'108f07b8382412612c048d07d13f814118445acd'
计算 Keccak-256 哈希(以太坊区块链使用的哈希函数)需要非标准的 Python 功能。下面的示例使用 PyPI 上提供的 pycryptodome 包:https://pypi.org/project/pycryptodome。
首先安装 "pycryptodome"(https://www.pycryptodome.org):
pip install pycryptodome
然后编写 Python 代码来计算 Keccak-256 哈希:
from Crypto.Hash import keccak
import binascii
keccak256 = keccak.new(data=b'hello', digest_bits=256).digest()
print("Keccak256:", binascii.hexlify(keccak256))
运行上述代码示例:https://repl.it/@nakov/Keccak256-in-Python。
上述示例的输出为:
Keccak256: b'1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8'