hashlib:提供各种哈希算法,如MD5、SHA1等。
一、常用方法
(一)函数
hashlib.md5(data): 创建一个MD5哈希对象。
hashlib.sha1(data): 创建一个SHA-1哈希对象。
hashlib.sha224(data): 创建一个SHA-224哈希对象。
hashlib.sha256(data): 创建一个SHA-256哈希对象。
hashlib.sha384(data): 创建一个SHA-384哈希对象。
hashlib.sha512(data): 创建一个SHA-512哈希对象。
hashlib.new(name, data): 创建一个指定名称的哈希对象。
(二)类
hashlib.Hash: 哈希对象的基类(不直接使用)。
hashlib.md5: MD5哈希类。
hashlib.sha1: SHA-1哈希类。
hashlib.sha224: SHA-224哈希类。
hashlib.sha256: SHA-256哈希类。
hashlib.sha384: SHA-384哈希类。
hashlib.sha512: SHA-512哈希类。
(三)方法(适用于所有哈希对象)
update(data): 更新哈希对象,以包含字节类型的data。
digest(): 返回数据的摘要,作为字节对象。
hexdigest(): 返回数据的摘要,作为十六进制字符串。
copy(): 返回当前哈希对象的副本。
二、使用案例(函数)
import hashlib
# 示例数据
data = b"Example data for hashing"
# 使用不同的哈希函数创建哈希对象并计算哈希值
md5_hash = hashlib.md5(data).hexdigest()
sha1_hash = hashlib.sha1(data).hexdigest()
sha224_hash = hashlib.sha224(data).hexdigest()
sha256_hash = hashlib.sha256(data).hexdigest()
sha384_hash = hashlib.sha384(data).hexdigest()
sha512_hash = hashlib.sha512(data).hexdigest()
# 使用hashlib.new创建一个SHA-256哈希对象
new_sha256_hash = hashlib.new('sha256', data).hexdigest()
# 打印所有哈希值
print("MD5:", md5_hash)
print("SHA-1:", sha1_hash)
print("SHA-224:", sha224_hash)
print("SHA-256:", sha256_hash)
print("SHA-384:", sha384_hash)
print("SHA-512:", sha512_hash)
print("New SHA-256:", new_sha256_hash)
输出结果:这是对字符串"Example data for hashing"使用不同哈希算法计算出的哈希值。每种算法生成的哈希值长度和格式不同,适用于不同的安全需求。
MD5: 9e3dc59b4ba27f28215df21ea2cf8762
SHA-1: e9864acfe858c64291c3dbcf9f8035f6a5a447cf
SHA-224: d35a285870b93da24463ea0104394a189f5dbaa14f98ae6786362ec5
SHA-256: 69ce07ff3d7cd16a570884e7efaf9597e02780056751f110db99743e7ac0bea6
SHA-384: 4ee19b95e6717e218d8e36f76e049cc88663928aaed844052dacf66651b40924fe77deeda9fe24ae2701dfd3c7b12d48
SHA-512: 365c2e9f8b96867c15412b63ada324fc67990fb6a19f3c64dd8c413a8b8f14ac1f702ea618f409632cedaafd4e274215e364ee6a03147a51e3e63e11b7bc0783
New SHA-256: 69ce07ff3d7cd16a570884e7efaf9597e02780056751f110db99743e7ac0bea6
三、使用案例(类)
import hashlib
# 示例数据
data = b"Example data for hashing"
# 使用不同的哈希类创建哈希对象并计算哈希值
md5_hash = hashlib.md5()
md5_hash.update(data)
md5_digest = md5_hash.hexdigest()
sha1_hash = hashlib.sha1()
sha1_hash.update(data)
sha1_digest = sha1_hash.hexdigest()
sha224_hash = hashlib.sha224()
sha224_hash.update(data)
sha224_digest = sha224_hash.hexdigest()
sha256_hash = hashlib.sha256()
sha256_hash.update(data)
sha256_digest = sha256_hash.hexdigest()
sha384_hash = hashlib.sha384()
sha384_hash.update(data)
sha384_digest = sha384_hash.hexdigest()
sha512_hash = hashlib.sha512()
sha512_hash.update(data)
sha512_digest = sha512_hash.hexdigest()
# 打印所有哈希值
print("MD5:", md5_digest)
print("SHA-1:", sha1_digest)
print("SHA-224:", sha224_digest)
print("SHA-256:", sha256_digest)
print("SHA-384:", sha384_digest)
print("SHA-512:", sha512_digest)
输出结果:这些是对字符串"Example data for hashing"使用不同哈希类计算出的哈希值。每种哈希类提供的方法和之前的函数类似,生成的哈希值也相同。
MD5: 9e3dc59b4ba27f28215df21ea2cf8762
SHA-1: e9864acfe858c64291c3dbcf9f8035f6a5a447cf
SHA-224: d35a285870b93da24463ea0104394a189f5dbaa14f98ae6786362ec5
SHA-256: 69ce07ff3d7cd16a570884e7efaf9597e02780056751f110db99743e7ac0bea6
SHA-384: 4ee19b95e6717e218d8e36f76e049cc88663928aaed844052dacf66651b40924fe77deeda9fe24ae2701dfd3c7b12d48
SHA-512: 365c2e9f8b96867c15412b63ada324fc67990fb6a19f3c64dd8c413a8b8f14ac1f702ea618f409632cedaafd4e274215e364ee6a03147a51e3e63e11b7bc0783
四、使用案例(方法(适用于所有哈希对象))
import hashlib
# 示例数据
data = b"Example data for hashing"
# 创建一个SHA-256哈希对象
sha256_hash = hashlib.sha256()
# 使用update方法更新哈希对象
sha256_hash.update(data)
# 使用digest方法获取字节形式的摘要
digest_bytes = sha256_hash.digest()
# 使用hexdigest方法获取十六进制字符串形式的摘要
digest_hex = sha256_hash.hexdigest()
# 使用copy方法创建哈希对象的副本
sha256_hash_copy = sha256_hash.copy()
# 验证副本的哈希值是否相同
copy_digest_hex = sha256_hash_copy.hexdigest()
# 打印结果
print("Digest (bytes):", digest_bytes)
print("Digest (hex):", digest_hex)
print("Copy Digest (hex):", copy_digest_hex)
输出结果,这些输出展示了如何使用hashlib模块中的方法来处理哈希对象:
digest()方法返回数据的摘要,作为字节对象。
hexdigest()方法返回数据的摘要,作为十六进制字符串。
copy()方法创建哈希对象的副本,副本的哈希值与原始对象相同。
Digest (bytes): b"i\xce\x07\xff=|\xd1jW\x08\x84\xe7\xef\xaf\x95\x97\xe0'\x80\x05gQ\xf1\x10\xdb\x99t>z\xc0\xbe\xa6"
Digest (hex): 69ce07ff3d7cd16a570884e7efaf9597e02780056751f110db99743e7ac0bea6
Copy Digest (hex): 69ce07ff3d7cd16a570884e7efaf9597e02780056751f110db99743e7ac0bea6