Python如何使用不同的哈希算法?本文教你使用 hashlib 内置模块在 Python 中使用不同的哈希算法,例如 SHA-2、SHA-3 和 BLAKE2,以实现数据完整性。
如何使用hashlib哈希算法?散列算法是将数据转换为固定长度的散列值、散列码或散列的数学函数。输出哈希值实际上是原始值的汇总。这些散列值最重要的一点是不可能仅从散列值中检索原始输入数据。
现在,你可能会想,那么使用散列算法有什么好处呢?为什么不只使用加密?好吧,尽管加密对于保护数据(数据机密性)很重要,但有时能够证明没有人修改过你发送的数据也很重要。使用散列值,你将能够判断某些文件自创建以来是否未修改(数据完整性)。
不仅如此,它们的使用例子还有很多,一些例子包括数字签名、公钥加密、消息认证、密码保护和许多其他加密协议。事实上,无论你是将文件存储在云存储系统上,使用Git 版本控制系统,连接到HTTPS网站,使用SSH连接到远程机器,甚至在你的手机上发送消息,都有一个哈希在引擎盖下的某个地方运行。
另请阅读: 如何使用 Python 中的套接字在网络中传输文件。
在本教程中,我们将使用hashlib内置模块在 Python 中使用不同的哈希算法,让我们开始吧,使用hashlib哈希算法示例:
import hashlib
# encode it to bytes using UTF-8 encoding
message = "Some text to hash".encode()
我们将在这个消息字符串上使用不同的哈希算法,从MD5开始:
# hash with MD5 (not recommended)
print("MD5:", hashlib.md5(message).hexdigest())
输出:
MD5: 3eecc85e6440899b28a9ea6d8369f01c
MD5 现在已经过时了,你永远不应该使用它,因为它不抗碰撞,让我们试试SHA-2,使用hashlib哈希算法示例:
# hash with SHA-2 (SHA-256 & SHA-512)
print("SHA-256:", hashlib.sha256(message).hexdigest())
print("SHA-512:", hashlib.sha512(message).hexdigest())
输出:
SHA-256: 7a86e0e93e6aa6cf49f19368ca7242e24640a988ac8e5508dfcede39fa53faa2
SHA-512: 96fa772f72678c85bbd5d23b66d51d50f8f9824a0aba0ded624ab61fe8b602bf4e3611075fe13595d3e74c63c59f7d79241acc97888e9a7a5c791159c85c3ccd
Python如何使用不同的哈希算法?SHA-2 是 4 个哈希函数的家族: SHA-224、 SHA-256、 SHA-384和SHA-512,你还可以使用hashlib.sha224()和hashlib.sha-384()。但是,主要使用SHA-256和SHA-512。
它之所以被称为SHA-2 (S ^ ecure ^ h灰一lgorithm 2),是因为SHA-2是的继任者SHA-1 ,其已经过时,容易折断,动机SHA-2是产生更长的哈希值,这导致比SHA-1更高的安全级别。
尽管现在仍在使用SHA-2,但许多人认为对SHA-2 的攻击只是时间问题,由于其与SHA-1 的相似性,研究人员担心其长期安全性。
于是,NIST引入了SHA-3作为备份方案,是一种与SHA-2和SHA-1完全不同的海绵函数,我们在Python中看看:
# hash with SHA-3
print("SHA-3-256:", hashlib.sha3_256(message).hexdigest())
print("SHA-3-512:", hashlib.sha3_512(message).hexdigest())
输出:
SHA-3-256: d7007c1cd52f8168f22fa25ef011a5b3644bcb437efa46de34761d3340187609
SHA-3-512: de6b4c8f7d4fd608987c123122bcc63081372d09b4bc14955bfc828335dec1246b5c6633c5b1c87d2ad2b777d713d7777819263e7ad675a3743bf2a35bc699d0
如何使用hashlib哈希算法?SHA-3 不太可能很快被破解。事实上,数百名熟练的密码分析员未能破解SHA-3。
散列算法中的安全是什么意思?散列函数具有许多安全特性,包括抗碰撞性,它由算法提供,使攻击者很难找到散列为相同散列值的两个完全不同的消息。
抗前像也是哈希算法安全性的关键因素,抗前像的算法使得攻击者很难且耗时地找到给定哈希值的原始消息。
升级到SHA-3 的动机很少,因为SHA-2仍然是安全的,而且速度也是一个问题,所以SHA-3并不比SHA-2快。
如果我们想使用比SHA-2更安全且至少与SHA-3一样安全的更快哈希函数怎么办?答案在于BLAKE2,使用hashlib哈希算法示例如下:
# hash with BLAKE2
# 256-bit BLAKE2 (or BLAKE2s)
print("BLAKE2c:", hashlib.blake2s(message).hexdigest())
# 512-bit BLAKE2 (or BLAKE2b)
print("BLAKE2b:", hashlib.blake2b(message).hexdigest())
输出:
BLAKE2c: 6889074426b5454d751547cd33ca4c64cd693f86ce69be5c951223f3af845786
BLAKE2b: 13e2ca8f6a282f27b2022dde683490b1085b3e16a98ee77b44b25bc84a0366afe8d70a4aa47dd10e064f1f772573513d64d56e5ef646fb935c040b32f67e5ab2
Python如何使用不同的哈希算法?BLAKE2 哈希比SHA-1、 SHA-2、 SHA-3甚至MD5更快,甚至比SHA-2更安全。它适用于支持多核系统并行计算的现代 CPU。
BLAKE2被广泛使用,并已集成到主要的密码学库中,如OpenSSL和钠等。
你还可以轻松地散列整个文件,只需读取所有文件内容,然后将文件字节传递给我们介绍的任何函数。在此处检查相应的代码。
如何使用hashlib哈希算法?最后,为了进一步阅读,你需要阅读hashlib 模块的官方 Python 文档。另外,如果你对密码学感兴趣,Serious Cryptography 这本书帮助我学习了很多密码学,我希望你也这样做!