一、简介
hashlib 是 Python 中的一个标准库,用于提供多种哈希算法的实现。它提供了一种统一的接口,使得在 Python 中使用不同的哈希函数(如 SHA-256、MD5、SHA-1 等)变得简单和方便。
优点:
1.简单易用:hashlib 提供了简单的 API,使得在 Python 中进行哈希操作变得容易。你只需要导入 hashlib 模块,选择合适的哈希算法,然后调用相应的方法即可。
2.安全性:hashlib 实现了多种常用的哈希算法,这些算法经过广泛的测试和验证,被认为是安全可靠的。你可以放心地使用这些算法来保护数据的完整性和安全性。
3.通用性:hashlib 支持多种哈希算法,可以满足不同的需求。你可以根据具体的应用场景选择合适的哈希算法,以获得最佳的性能和安全性。
缺点:
1.性能:某些哈希算法的计算复杂度较高,可能会导致较慢的哈希计算速度。在处理大量数据或对性能要求较高的场景中,可能需要考虑使用其他更高效的哈希算法库
二、加解密方法
- hashlib.new(name, data=b’', **kwargs):创建一个新的哈希对象
- name:指定的哈希算法的名称,md5、sha1、sha224、sha256、sha384、sha512、blake2b、blake2s、sha3_224、sha3_256、sha3_384、sha3_512、hake_128、shake_256
- data:默认为空字节串要进行哈希计算的数据。可以是字节串、字节数组或可迭代对象。
- kwargs:其他可选参数,用于指定哈希算法的特定选项。这些参数的具体含义和使用方式取决于所选的哈希算法
import hashlib
message = 'hello word'.encode('utf-8')
md5 = hashlib.new('md5',message)
print(md5.hexdigest())
md5.update('hello'.encode('utf-8'))
print('十六进制哈希值:',md5.hexdigest())
print('十六字节哈希值:',md5.digest())
print('哈希算法的分块大小:',md5.block_size)
print('哈希算法的哈希值大小:',md5.digest_size)
print('算法名称:',md5.name)
print('拷贝当前哈希对象:',md5.copy())
- hashlib.md5(message):对给定的 message 进行 MD5 哈希计算,并返回哈希对象
- hashlib.sha1(message):对给定的 message 进行 SHA1 哈希计算,并返回哈希对象
- hashlib.sha256(message):对给定的 message 进行 SHA256 哈希计算,并返回哈希对象
- hashlib.sha224(message):对给定的 message 进行 SHA224 哈希计算,并返回哈希对象
- hashlib.sha512(message):对给定的 message 进行 SHA512 哈希计算,并返回哈希对象
- hashlib.sha384(message):对给定的 message 进行 SHA384 哈希计算,并返回哈希对象
- hashlib.pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None):使用 PBKDF2 算法计算密码的派生密钥,返回一个派生密钥的字节串对象
- hash_name:指定要使用的哈希算法的名称,md5、sha1、sha224、sha256、sha384、sha512、blake2b、blake2s、sha3_224、sha3_256、sha3_384、sha3_512、hake_128、shake_256
- password:二进制字符串,输入的密码。
- salt:二进制字符串,用于增加哈希计算的强度和唯一性的盐值。
- iterations:整数,指定迭代次数,用于增加哈希计算的复杂度。
- dklen(可选):整数,指定派生密钥的长度(以字节为单位)。如果未提供此参数,则默认为使用所选哈希算法的摘要长度。
import hashlib
password = b'my_password'
salt = b'some_salt'
iterations = 1000
dklen = 32
key = hashlib.pbkdf2_hmac('sha256', password, salt, iterations, dklen)
print(key.hex())
- hashlib.scrypt(password, salt, n, r, p, dklen=None):使用 scrypt 算法计算密码的派生密钥,返回一个派生密钥的字节串对象
-
password:要进行哈希处理的密码,类型为bytes或bytearray。
-
salt:用于增加哈希安全性的盐值,类型为bytes或bytearray。
-
n:scrypt算法的CPU/memory cost参数,表示迭代次数,应为2的幂。较大的值会增加计算时间和内存消耗,提高安全性。通常推荐的值是214或215。
-
r:scrypt算法的block size参数,控制内部的混洗操作次数。
-
p:scrypt算法的parallelization参数,控制内部的并行化操作次数。
-
dklen:生成的派生密钥的长度,单位为字节。如果未提供该参数,则默认为scrypt算法的输出长度。
import hashlib
password = b'my_password'
salt = b'some_salt'
n = 2 ** 14
r = 8
p = 1
dklen = 64
key = hashlib.scrypt(password, salt=salt, n=n, r=r, p=p, dklen=dklen)
print(key.hex())
- hashlib.file_digest(fileobj, digest):计算指定文件对象的内容,使用指定的摘要算法
- fileobj:文件对象,二进制
- digest:指定要使用的哈希算法的名称,md5、sha1、sha224、sha256、sha384、sha512、blake2b、blake2s、sha3_224、sha3_256、sha3_384、sha3_512、hake_128、shake_256
import hashlib
with open('test.txt', 'rb') as file:
md5 = hashlib.file_digest(file, 'md5')
print(md5.hexdigest())