python内置模块hashlib,哈希算法库

这篇文章介绍了Python标准库hashlib的功能,包括提供多种哈希算法(如MD5、SHA-1、SHA-256等),简单易用的API以及其在数据加密和安全中的应用。同时提到了性能和安全性的考虑,以及如何使用file_digest函数计算文件的哈希值。
摘要由CSDN通过智能技术生成
一、简介

hashlib 是 Python 中的一个标准库,用于提供多种哈希算法的实现。它提供了一种统一的接口,使得在 Python 中使用不同的哈希函数(如 SHA-256、MD5、SHA-1 等)变得简单和方便。
优点:
1.简单易用:hashlib 提供了简单的 API,使得在 Python 中进行哈希操作变得容易。你只需要导入 hashlib 模块,选择合适的哈希算法,然后调用相应的方法即可。
2.安全性:hashlib 实现了多种常用的哈希算法,这些算法经过广泛的测试和验证,被认为是安全可靠的。你可以放心地使用这些算法来保护数据的完整性和安全性。
3.通用性:hashlib 支持多种哈希算法,可以满足不同的需求。你可以根据具体的应用场景选择合适的哈希算法,以获得最佳的性能和安全性。
缺点:
1.性能:某些哈希算法的计算复杂度较高,可能会导致较慢的哈希计算速度。在处理大量数据或对性能要求较高的场景中,可能需要考虑使用其他更高效的哈希算法库

二、加解密方法
  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())
  1. hashlib.md5(message):对给定的 message 进行 MD5 哈希计算,并返回哈希对象
  2. hashlib.sha1(message):对给定的 message 进行 SHA1 哈希计算,并返回哈希对象
  3. hashlib.sha256(message):对给定的 message 进行 SHA256 哈希计算,并返回哈希对象
  4. hashlib.sha224(message):对给定的 message 进行 SHA224 哈希计算,并返回哈希对象
  5. hashlib.sha512(message):对给定的 message 进行 SHA512 哈希计算,并返回哈希对象
  6. hashlib.sha384(message):对给定的 message 进行 SHA384 哈希计算,并返回哈希对象
  7. 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())
  1. 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())
  1. 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())
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值