0
点赞
收藏
分享

微信扫一扫

函数和常用模块【day06】:hashlib模块(十三)

infgrad 2022-05-29 阅读 93

我们写程序中,经常需要对字符串进行MD5加密,python中也支持这种加密,下面说说,这个加密模块:hashlib。

原则:只要你的输入是固定的,你的输出也一定是固定的。MD5是在hash上更改的,主要做文件的一致性

1、md5加密

import hashlib

m = hashlib.md5()  # 创建一个MD5对象
m.update(b"luo")  # 在python3中需要是2进制的值,所以字符串前加b
print(m.hexdigest())  # 以16进制打印MD5值
# 输出
6aaf8fc5fa8975075a1e8a40dc48cebd

m.update(b"ahong")
print(m.hexdigest())
# 输出
be960d8f1a5d67f846c6dbc0b96eecf0

2、文件内容MD5值
说明:如果我们想得到一个文件所有内容的MD5值,我们所做的方法是循环这个文件,获取每行的MD5值,但是这样生成的MD5值的效率会变慢,因为每一行都需要计算。这样我们还不如直接把文件的所有内容加载出来,直接计算它的MD5值,这样反而快些。

代码如下:

import hashlib

m = hashlib.md5()  # 创建MD5对象m
m.update(b"luo")
print(m.hexdigest())
# 输出
d0cd2693b3506677e4c55e91d6365bff
m.update(b"ahong")
print(m.hexdigest())
# 输出
fe18f0149aadc1c13966429475469886
m2 = hashlib.md5()  # 创建MD5对象m2
m2.update(b"luoahong")
print(m2.hexdigest())
# 输出
be960d8f1a5d67f846c6dbc0b96eecf0

注:由上面的代码可以看出,你读到最后一行的字符串的MD5值跟一下子读取所有内容的MD5值是一样的,这是为什么呢?其实这边update做了一个拼接功能,m.update(b"luo")是返回的字符串"luo"的MD5值,但是到了第二个m.update("ahong")的值并不是"ahong"的字符串的MD5值,它需要拼接前面的字符串,应该是m.update(b"luoahong")的MD5值,所以相当于m.update(b"luo"),m.update(b"ahong") = m.update(b"luo"+b"ahong")。

举报

相关推荐

hashlib和hmac模块

Day06

python hashlib模块

DAY06 列表和字典

Day06 方法

day06 笔记

Day06作业

0 条评论