欢迎来真孝善网,为您提供真孝善正能量书籍故事!

深入浅出:Python hashlib模块使用指南

时间:11-09 神话故事 提交错误

在hashlib 模块中,始终存在sha1()、sha224()、sha256()、sha384()、sha512() 和blake2b()、blake2s() 方法。

md5() 方法通常也可用。如果您使用符合FIPS 的罕见Python,md5() 可能无法工作(因为MD5 不够安全)。

是否有其他算法可用取决于Python运行的操作系统的OpenSSL库。在大多数操作系统中,可以使用sha3_224()、sha3_256()、sha3_384()、sha3_512() 和shake_128()、shake_256()。

具体可以使用哪些哈希算法可以使用下面的常量来查看。

使用前导入:

导入哈希库

可以使用常量:

hashlib.algorithms_available 或hashlib.algorithms_guaranteed 获取此模块支持的哈希算法集。

hashlib.algorithms_available

返回可用哈希函数名称的集合。包含sha384、sha521、md5等32种哈希函数。

请注意,同一函数可能会以不同的名称(大写和小写)出现多次。

{"RIPEMD160","sha224","sha3_224","SHA384","blake2s","blake2b",

"sha3_512","sha1","DSA","ripemd160","sha3_384","sha3_256",

"sha"、"shake_128"、"sha512"、"ecdsa-with-SHA1"、"shake_256"、

"SHA"、"SHA512"、"dsaEncryption"、"MD5"、"SHA256"、"DSA-SHA"、

"漩涡","MD4","dsaWithSHA","SHA224","sha256","md4",

"sha384"、"md5"、"SHA1"}hashlib.algorithms_guaranteed

返回此模块支持的哈希函数名称集。包含sha3_256、md5等14个哈希函数。此时不存在大小写问题。

算法_guaranteed 返回的结果是算法_可用返回的结果的子集。

{"shake_256", "sha224", "sha3_224", "blake2s", "blake2b",

"sha3_512","sha1","shake_128","sha3_384","sha256",

"sha3_256", "sha384", "md5", "sha512"}

二、散列算法的应用场景

这些哈希函数常用于一致性验证、数字签名、安全访问认证等场合。 [2]

例如,MD5(消息摘要算法版本5)用于文件一致性验证。

每个文件的MD5值就像文件的“数字指纹”。如果有人对文件进行任何更改,其MD5 值(即相应的“数字指纹”)就会发生变化。

在软件下载操作中,通过比较前后两个MD5值是否相同,可以判断下载的文件是否有错误或者下载的文件是否被篡改。

下载文件的MD5值

三、使用示例

blake2b

布莱克2s

MD5

沙1

沙224

沙256

沙384

sha512

sha3_224

sha3_256

sha3_384

sha3_512

摇一摇_128

shake_256 这些哈希算法的使用方式相同,因为它们都返回具有相同接口的哈希对象。

例如,使用sha256() 方法创建SHA-256 哈希对象,并以字节数据作为参数调用update() 方法。

使用digest()或hexdigest()方法获取相应的摘要信息。

演示代码如下:

#编码=utf-8

导入哈希库

文本=b"你好世界。"

hs=hashlib.sha256()

HS.更新(文本)

out_text=hs.hexdigest()

打印(文本,"n==",out_text)

# 内容为中文时注意编码转换

msg="代码工蚁".encode("utf-8")

msg_hs=hashlib.sha256()

msg_hs.更新(msg)

out_msg=msg_hs.hexdigest()

print(msg, "n==", out_msg)

print(len(out_msg)) # 长度64 位注意:

1、如果update()方法的参数是字节类型,可以在字符串前加b来识别英文字符。必须对中文等非ASCII 字符进行编码。

例如:msg="码工蚁".encode("utf-8")

msg=bytes("码工蚁", 编码="utf-8")

2、对同一个哈希对象的update()操作,实际上相当于参数拼接后的update()。

即hs.update(b"abc"),然后hs.update(b"def"),相当于hs.update(b"abc" + b"def"),与hs.update(相同b"abcdef")

3、hash对象的hexdigest()方法返回字符型摘要信息(处理结果),digest()返回字节型摘要信息。

百度翻译API的代码片段:

# 申请API地址:

#http://api.fanyi.baidu.com/api/trans/product/index

appid="2018****************78"

密钥="Qw6n********************fW"

myurl="http://api.fanyi.baidu.com/api/trans/vip/translate"

q=反式文本

fromLang="en"

toLang="zh"

盐=random.randint(32768, 65536)

符号=appid+q+str(salt)+secretKey

m1=hashlib.md5()

m1.update(sign.encode("utf-8"))

符号=m1.hexdigest()

myurl=myurl+"?appid="+appid+"q="+quote(q)+"from="+fromLang+"to="+toLang+"salt="+str(salt)+"sign="+符号代码说明:

百度翻译API使用的md5()方法。

盐=random.randint(32768, 65536)

使用随机整数“加盐”(添加额外信息,增加复杂度,让信息摘要更加隐蔽)

四、存在问题及发展

SHA-1 存在严重的安全问题。 2017年2月,CWI阿姆斯特丹和谷歌宣布实施SHA-1碰撞攻击。

(总共约900 万TB 的SHA1 计算量。完成第一阶段的攻击需要在单个CPU 上进行6500 年的计算。)[3]

SHA-2 系列包括:SHA-256、SHA-384 和SHA-512 以及SHA-224。

SHA-3 竞赛的获胜算法Keccak 的算法成为SHA-3,也是一个哈希家族。

BLAKE2定位为目前安全系数最高的哈希函数。在:

BLAKE2b 是BLAKE 的64 位版本,可以生成高达512 位的任意长度哈希值。

BLAKE2s 是BLAKE 的32 位版本,可以生成高达256 位的任意长度哈希值。

BLAKE2 比MD5 和SHA-1 更快。 [4]

各种哈希函数速度对比图片来源:http://www.blake2.net/有人说智能手机破解md5只需要30秒。 [3]

我尝试了一下,用8个纯数字0-9破解MD5大约需要140秒。

看来程序还需要优化一下。

* 所有示例均在WIN7 64位系统上使用python3.6.1执行。

[1]hashlib(python 3.6)官方文档:

https://docs.python.org/3.6/library/hashlib.html#哈希算法

[2]百度百科:MD5、SHA家族

用户评论

她的风骚姿势我学不来

原来Python也有自带加密工具包啊!

    有13位网友表示赞同!

_心抽搐到严重畸形っ°

我要学习一下hashlib这个模块,做个安全方案研究。

    有12位网友表示赞同!

残花为谁悲丶

搞区块链技术的同学肯定要用到Python里的hashlib吧?

    有5位网友表示赞同!

花容月貌

了解一下hash算法和hashlib的用法,挺有实际意义的。

    有14位网友表示赞同!

念旧情i

想问问这种加密方法安全性怎么样?足够用吗?

    有6位网友表示赞同!

北朽暖栀

哈希值计算真的很有意思,复杂度很高啊!

    有8位网友表示赞同!

走过海棠暮

Python这么强大,原来也有数据安全相关的工具库。

    有13位网友表示赞同!

采姑娘的小蘑菇

学习新知识总是很兴奋的!这次的目标是掌握hashlib模块。

    有18位网友表示赞同!

陌潇潇

看这个标题就感觉很专业,我得找资料好好学习一下。

    有14位网友表示赞同!

焚心劫

以前一直用其他语言做安全性问题,现在来Python试试吧!

    有9位网友表示赞同!

秘密

觉得编程的安全问题越来越重要了,需要多了解一些相关技术。

    有15位网友表示赞同!

何必锁我心

最近在研究数据安全,看到这个标题感觉很有用。

    有9位网友表示赞同!

旧事酒浓

学习Python确实能应用到实际项目中,很实用。

    有19位网友表示赞同!

ゞ香草可樂ゞ草莓布丁

想问一下,hashlib模块的安全性怎么样?

    有20位网友表示赞同!

昂贵的背影

打算写一个简单的程序,试试使用hashlib来加密数据。

    有10位网友表示赞同!

蔚蓝的天空〃没有我的翅膀

感觉这个标题很有深度,需要花点时间去理解它。

    有15位网友表示赞同!

凉笙墨染

我对Python越来越感兴趣了,想要学习更多它的知识和技巧。

    有12位网友表示赞同!

淡抹烟熏妆丶

学习新的工具包可以帮助我解决实际问题,提高效率。

    有9位网友表示赞同!

你tm的滚

编程语言的发展确实很迅速,要不断学习才能跟上节奏。

    有20位网友表示赞同!

【深入浅出:Python hashlib模块使用指南】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活