资讯专栏INFORMATION COLUMN

python模块之hashlib

luodongseu / 2140人阅读

摘要:使用算法名称构造函数较使用更快所有平台的模块都支持的算法的名称集合。的结果集总是结果集的子集对象的字节长度对象的内部块大小对象的名称传递类字节参数通常是更新对象。表示的哈希摘要算法的名称,比如或。表示迭代次数,基于算法以及机器计算能力设置。

hashlib模块实现了多种安全哈希和信息摘要算法的通用接口,包括FIPS中定义的SHA1, SHA224, SHA256, SHA384, SHA512以及RFC 1321中定义的MD5

注意点:
1. adler32及crc32哈希由zlib模块提供
2. 某些算法已知存在哈希碰撞弱点

哈希算法

每个hash算法都有一个同名的构造函数,并返回拥有相同接口的hash对象

sha1(), sha224(), sha256(), sha384(), sha512(), blake2b()以及blake2s()这些构造函数在hashlib模块中总是可用。md5()通常也可用,但在某些罕见的python版本(“FIPS compliant” build of Python)中例外。取决于所用平台上python使用的OpenSSL,hashlib也支持某些额外的算法,在大多数平台上,sha3_224(), sha3_256(), sha3_384(), sha3_512(), shake_128(), shake_256()都是可用的。

>>> import hashlib
>>> m = hashlib.sha256()
>>> m.update(b"Nobody inspects")
>>> m.update(b" the spammish repetition")
>>> m.digest()
b"x03x1exdd}Aex15x93xc5xfex00oxa5u+7xfdxdfxf7xbcNx84:xa6xafx0cx95x0fKx94x06"

或者更精简的方式:

>>> hashlib.sha256(b"Nobody inspects the spammish repetition").digest()
b"x03x1exdd}Aex15x93xc5xfex00oxa5u+7xfdxdfxf7xbcNx84:xa6xafx0cx95x0fKx94x06"
hashlib.new(name[, data])

通用构造函数,name参数表示要使用的hash算法的名称,可以是上述列出的所有hash算法以及OpenSSL库支持的其他算法。使用算法名称构造函数较使用new()更快

>>> h = hashlib.new("sha256", b"Nobody inspects the spammish repetition")
>>> h.digest()
b"x03x1exdd}Aex15x93xc5xfex00oxa5u+7xfdxdfxf7xbcNx84:xa6xafx0cx95x0fKx94x06"
hashlib.algorithms_guaranteed

所有平台的hashlib模块都支持的hash算法的名称集合。md5也在此集合中(Note that ‘md5’ is in this list despite some upstream vendors offering an odd “FIPS compliant” Python build that excludes it.)。

hashlib.algorithms_available

当前运行的python解释器支持的hash算法的名称集合,在new()构造函数中使用都能被正确识别。同一算法可能以不同名称出现多次。
hashlib.algorithms_guaranteed的结果集总是hashlib.algorithms_available结果集的子集

hash.digest_size

hash对象的字节长度

hash.block_size

hash对象的内部块大小

hash.name

hash对象的名称

hash.update(data)

传递类字节参数(通常是bytes)更新hash对象。重复调用update()等同于单次的拼接调用:m.update(a); m.update(b)等同m.update(a+b)

从python3.1开始,为了更好的多线程性能,使用OpenSSL支持的hash算法且处理数据量大于2047个字节的update(或创建)操作发生时,将释放python全局解释器锁允许其他线程运行

hash.digest()

截止此方法调用时,update()已接收的数据的摘要,是一个可包含0到255之间所有字节的字节对象

hash.hexdigest()

类似于digest(),不过是以双倍长度的只包含十六进制数字的字符串对象返回摘要值。

hash.copy()

返回hash对象的克隆

SHAKE算法的可变长度摘要

The shake_128() and shake_256() algorithms provide variable length digests with length_in_bits//2 up to 128 or 256 bits of security

shake.digest(length)

同hash.digest()

shake.hexdigest(length)

同hash.hexdigest()

密钥导出

密钥导出和扩展算法是为安全密码散列设计的。类似sha1(password)这种简单算法不能有效抵御暴力破解,一个好的密码散列函数必须是可调节的,耗时的,并包含盐

hashlib.pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None)

pbkdf2_hmac()提供了使用PKCS#5填充的pbkdf2算法,使用HMAC作为伪随机函数。

hash_name表示HMAC的哈希摘要算法的名称,比如"sha1"或"sha256"。

passwordsalt是类字节对象,password长度应该限制在一个合理范围之间,salt长度应该在16个字节以上且来源恰当。

iterations表示迭代次数,基于hash算法以及机器计算能力设置。截止2013年,sha256算法建议最少进行10万次迭代

dklen表示导出密钥的长度。默认值为None,使用hash_name算法计算的hash对象的digest_size属性长度

>>> import hashlib, binascii
>>> dk = hashlib.pbkdf2_hmac("sha256", b"password", b"salt", 100000)
>>> binascii.hexlify(dk)
b"0394a2ede332c9a13eb82e9b24631604c31df978b4e2f0fbd2c549944f9d79a5"

Note: A fast implementation of pbkdf2_hmac is available with OpenSSL. The Python implementation uses an inline version of hmac. It is about three times slower and doesn’t release the GIL.

hashlib.scrypt(password, *, salt, n, r, p, maxmem=0, dklen=64)

The function provides scrypt password-based key derivation function as defined in RFC 7914.

passwordsalt是类字节对象,password长度应该限制在一个合理范围之间,salt长度应该在16个字节以上且来源恰当。

n is the CPU/Memory cost factor, r the block size, p parallelization factor and maxmem limits memory (OpenSSL 1.1.0 defaults to 32 MiB). dklen is the length of the derived key.

BLAKE2

待补充...实在是编不下去了,对加密算法相关的知识太缺乏了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42573.html

相关文章

  • Python常用模块 hashlib模块——简单实现实现登录注册

    摘要:唯一要求使用中的进行加密请输入你的账号请输入你的密码加盐操作加密加密输入正确输入错误请输入你要注册的名字请输入你要注册的密码加密加密请输入你要执行的操作注册登录退出问题是 ...

    番茄西红柿 评论0 收藏2637
  • Python模块分析:第2节-hashlib加密模块

    摘要:上一篇文章模块分析第节模块下一篇文章模块分析第节模块模块是用来对字符串进行加密的模块,明文与密文是一一对应不变的关系用于注册登录时用户名密码等加密使用。一函数分析共有种加密算法,分别得到不同的加密密文。 上一篇文章:Python模块分析:第1节-random模块下一篇文章:Python模块分析:第3节-typing模块 hashlib模块是用来对字符串进行hash加密的模块,明文与密...

    WalkerXu 评论0 收藏0
  • Python中MD5加密

    摘要:的作用是让大容量信息在用数字签名软件签署私人密钥前被压缩成一种保密的格式就是把一个任意长度的字节串变换成一定长的十六进制数字串。获取由位随机大小写字母数字组成的值每次从中随机取一位获取原始密码的值原始密码随机生成位加密后的密码 MD5是什么 下面的概念是百度百科的: Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列...

    chadLi 评论0 收藏0
  • python--模块2

    摘要:可能没有用户输出的消息创建一个,用于写入日志文件再创建一个,用于输出到控制台对象可以添加多个和对象序列化模块什么叫序列化将原本的字典列表等内容转换成一个字符串的过程就叫做序列化。 hashlib模块 1.Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(...

    13651657101 评论0 收藏0
  • Python_异常和模块

    摘要:例如等价于到结束,但不包括。例如返回没有每次跳跃的间距,默认为。 异常处理 单个异常处理: try: print(num) except NameError: print(没有定义变量) except FileNotFoundError: print(找不到文件路径) print(1) 多个异常处理: try: print(num) # 1...

    piglei 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<