Python Hashlib

时间:2020-02-23 14:42:46  来源:igfitidea点击:

在本教程中,我们将学习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())