hashlib 模块提供了常见的哈希算法的实现,如 MD5、SHA-1、SHA-256 等。

要使用 hashlib 函数必须先导入:

代码语言:javascript

AI代码解释

import hashlib 

查看 hashlib 模块中的内容:

实例

代码语言:javascript

AI代码解释

>>> import hashlib
>>> dir(hashlib)
['__all__', '__block_openssl_constructor', '__builtin_constructor_cache', '__builtins__', '__cached__', '__doc__', '__file__', '__get_builtin_constructor', '__loader__', '__name__', '__package__', '__spec__', '_hashlib', 'algorithms_available', 'algorithms_guaranteed', 'blake2b', 'blake2s', 'md5', 'new', 'pbkdf2_hmac', 'scrypt', 'sha1', 'sha224', 'sha256', 'sha384', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'sha512', 'shake_128', 'shake_256']

以下是 hashlib 模块的一些常用方法和哈希算法的简介:

常用方法

hashlib.new(name, data=None): 创建一个哈希对象。

name 参数是哈希算法的名称,data 参数是要被哈希的数据。

实例

代码语言:javascript

AI代码解释

import hashlib

sha256_hash = hashlib.new('sha256')
sha256_hash.update(b'RUNOOB')
print(sha256_hash.hexdigest())

输出结果为:

代码语言:javascript

AI代码解释

673dc967d03201db7fe47b7eabd56c47ca5bc694222de303106a5504e5d0daa8

hashlib.md5() / hashlib.sha1() / hashlib.sha256() / ...: 直接使用特定的哈希算法创建哈希对象。

实例

代码语言:javascript

AI代码解释

import hashlib

md5_hash = hashlib.md5(b'RUNOOB')
print(md5_hash.hexdigest())

输出结果为:

代码语言:javascript

AI代码解释

18fa661e2a4a7dd6471cc1407290cf6e
哈希对象方法

update(data): 更新哈希对象的消息内容。

实例

代码语言:javascript

AI代码解释

import hashlib

sha256_hash = hashlib.sha256()
sha256_hash.update(b'Hello, ')
sha256_hash.update(b'Runoob!')
print(sha256_hash.hexdigest())

输出结果为:

代码语言:javascript

AI代码解释

1b56561022276e9a5a8e1cda72e1b39fca6f6074326a74d39f6dfd9540c8ecd7

hexdigest(): 获取十六进制表示的哈希值。

实例

代码语言:javascript

AI代码解释

import hashlib

md5_hash = hashlib.md5(b'RUNOOB')
print(md5_hash.hexdigest())

输出结果为:

代码语言:javascript

AI代码解释

18fa661e2a4a7dd6471cc1407290cf6e

digest(): 获取二进制表示的哈希值。

实例

代码语言:javascript

AI代码解释

import hashlib

sha1_hash = hashlib.sha1(b'RUNOOB')
print(sha1_hash.digest())

输出结果为:

代码语言:javascript

AI代码解释

b'4\x17\t\xd0\xdb\xc2f3/\x1c\xbc\xd8\xc2_\xd4\xa0T\x12\xb7\xd4'
常见哈希算法

MD5

实例

代码语言:javascript

AI代码解释

import hashlib

md5_hash = hashlib.md5(b'RUNOOB')
print(md5_hash.hexdigest())

输出结果为:

代码语言:javascript

AI代码解释

18fa661e2a4a7dd6471cc1407290cf6e

SHA-1

实例

代码语言:javascript

AI代码解释

import hashlib

sha1_hash = hashlib.sha1(b'RUNOOB')
print(sha1_hash.hexdigest())

输出结果为:

代码语言:javascript

AI代码解释

341709d0dbc266332f1cbcd8c25fd4a05412b7d4

SHA-256

实例

代码语言:javascript

AI代码解释

import hashlib

sha256_hash = hashlib.sha256(b'RUNOOB')
print(sha256_hash.hexdigest())

输出结果为:

代码语言:javascript

AI代码解释

673dc967d03201db7fe47b7eabd56c47ca5bc694222de303106a5504e5d0daa8

SHA-512

实例

代码语言:javascript

AI代码解释

import hashlib

sha512_hash = hashlib.sha512(b'RUNOOB')
print(sha512_hash.hexdigest())

输出结果为:

代码语言:javascript

AI代码解释

7cfe50493eebd48ee7330c797459c2d0d5ca943bd1c84ad7a0b6783b11cd49d06b4a1dc84ee9ea5e20d0bfedbdb67e716500a20e5870abecea3f32dc8484a811

在实际应用中,选择合适的哈希算法取决于具体的需求。需要注意的是,MD5 和 SHA-1 已经被认为不安全,特别是在安全领域,推荐使用更强大的算法,如 SHA-256 或 SHA-512。

Python hashlib 模块中常见的哈希算法及其含义:

算法名称

摘要长度(位)

输出长度(字节)

安全性

用途

md5

128

16

不安全

数据完整性验证、密码存储等

sha1

160

20

不安全

数据完整性验证、密码存储等

sha224

224

28

数据完整性验证、数字签名等

sha256

256

32

中等

数据完整性验证、数字签名等

sha384

384

48

数字签名、加密算法等

sha512

512

64

数字签名、加密算法等

sha3_224

224

28

未来标准的 SHA-3 家族成员,适用于数字签名等

sha3_256

256

32

未来标准的 SHA-3 家族成员,适用于数字签名等

sha3_384

384

48

未来标准的 SHA-3 家族成员,适用于数字签名等

sha3_512

512

64

未来标准的 SHA-3 家族成员,适用于数字签名等

shake_128

可变

可变

SHAKE 系列是 SHA-3 家族的可变长度版本,适用于各种应用

shake_256

可变

可变

SHAKE 系列是 SHA-3 家族的可变长度版本,适用于各种应用

说明:

  • 摘要长度(位): 表示哈希算法输出的摘要长度,以位为单位。
  • 输出长度(字节): 表示哈希算法输出的摘要长度,以字节为单位。
  • 安全性: 表示哈希算法的安全性级别,包括 "不安全"、"低"、"中等"、"高"。这是一个一般性的分类,具体的安全性还要考虑算法的用途和具体的攻击场景。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐