Python Hashlib
在本教程中,我们将学习Python Hashlib模块。
我们可以使用python hashlib模块从源消息生成消息摘要或者安全哈希。
在上一教程中,我们了解了Python Math。
Python Hashlib
为了生成python安全哈希消息,我们需要使用hashlib模块。
Python hashlib哈希函数采用可变长度的字节并将其转换为固定长度的序列。
这是一种单向功能。
这意味着,您对消息进行哈希处理,将获得固定长度的序列。
但是您无法从这些固定长度的序列中获取原始消息。
在密码术中,如果无法从哈希消息中解密原始消息,则认为哈希算法更好。
同样,更改原始消息中的一个字节会使消息摘要值发生重大变化。
Python安全哈希值用于以加密形式存储密码。
因此,即使应用程序所有者也无法访问用户密码,当用户再次输入密码时,密码也会匹配,并且哈希值会被计算并与存储的值进行比较。
可用的散列算法
我们可以使用algorithms_available
函数来获取系统中所有可用算法的列表,包括通过OpenSSl可用的算法。
也可以看到重复的算法名称。
同样,通过使用algorithms_guaranteed函数,您可以看到模块中存在的算法。
请参阅以下代码。
import hashlib print(hashlib.algorithms_available) print(hashlib.algorithms_guaranteed)
对于我的系统,输出如下所示。
它可以根据操作系统配置而有所不同。
{'MD5', 'SHA', 'sha1', 'shake_256', 'sha3_384', 'DSA-SHA', 'MD4', 'sha3_224', 'SHA1', 'ripemd160', 'SHA512', 'sha224', 'whirlpool', 'RIPEMD160', 'DSA', 'blake2s', 'SHA384', 'ecdsa-with-SHA1', 'md5', 'blake2b', 'shake_128', 'dsaEncryption', 'sha', 'sha256', 'md4', 'SHA224', 'SHA256', 'sha3_256', 'sha512', 'dsaWithSHA', 'sha384', 'sha3_512'} {'sha256', 'blake2s', 'sha3_224', 'sha224', 'sha1', 'md5', 'sha3_256', 'shake_256', 'sha512', 'blake2b', 'shake_128', 'sha3_384', 'sha384', 'sha3_512'}
Python hashlib示例
要使用Python hashlib模块,您只需要了解一些功能。
通过使用hashlib.encryption_algorithm_name(b" message")
函数,您可以一次对整个消息进行哈希处理。
同样,您可以使用update()
函数将字节消息附加到安全哈希值。
在两种情况下,输出都是相同的。
最后,通过使用digest()
函数,您可以获得安全的哈希值。
注意,b写入要散列的消息的左侧。
此b表示该字符串是字节字符串。
让我们看一下hashlib示例,以更加清楚。
import hashlib # import hashlib module # initialize using sha256 print('\nExample for SHA256') m = hashlib.sha256() # append string one after another m.update(b"This is a") m.update(b" great python tutorial.") print('Output 1 :', m.digest()) # use the whole string at once x = hashlib.sha256(b"This is a great python tutorial.") print('Output 2 :', x.digest()) # initialize using md5 print('\nExample for md5') m = hashlib.md5() # append string one after another m.update(b"This is a") m.update(b" great python tutorial.") print('Output 1 :', m.digest()) # use the whole string at once x = hashlib.md5(b"This is a great python tutorial.") print('Output 2 :', x.digest())