(1)MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)。128位长度。目前MD5是一种不可逆算法。
具有很高的安全性。它对应任何字符串都可以加密成一段唯一的固定长度的代码。
def md5(user):
import hashlib
import time
ctime = str(time.time())
m = hashlib.md5(bytes(str(user), encoding="utf-8"))
m.update(bytes(ctime, encoding="utf-8"))
return m.hexdigest()
(2)md5的用途
SHA1的全称是Secure Hash Algorithm(安全哈希算法) 。SHA1基于MD5,加密后的数据长度更长,它对长度小于264的输入,产生长度为160bit的散列值。比MD5多32位。
因此,比MD5更加安全,但SHA1的运算速度就比MD5要慢了。
ret = {
"noncestr": nonce,
"jsapi_ticket": js_ticket,
"timestamp": timestamp,
"url": url
}
temp = "&".join(['%s=%s' % (key.lower(), ret[key]) for key in sorted(ret)])
# 2. 将三个参数字符串拼接成一个字符串进行sha1加密
# sig是计算出来的签名结果
sig = hashlib.sha1(temp.encode("utf8")).hexdigest()
上面说过可以用MD5来检测两个文件是否相同,但想想,如果是两个很大的文件,担心内存不够用,这时怎么办?
这就要使用 update 方法了。代码如下:(windows 用户 要使用 'rb'方式打开文件)
import hashlib
def get_file_md5(f):
m = hashlib.md5()
while True:
data = f.read(10240)
if not data:
break
m.update(data)
return m.hexdigest()
with open("wechat_share.py", 'rb') as f:
a_md5 = get_file_md5(f)
with open("wechat_share_备份.py", 'rb') as f:
b_md5 = get_file_md5(f)
print(a_md5)
print(b_md5)
print(a_md5 == b_md5)
如果两个文件内容一模一样最后返回True,否则返回False
import hashlib
x = hashlib.md5()
x.update('hello, '.encode())
x.update('python'.encode())
print(x.hexdigest())
print(hashlib.md5('hello, python'.encode()).hexdigest())
两次的结果输出是一致的,SHA1 也是一样的用法。
pip install passlib -i https://mirrors.aliyun.com/pypi/simple
passlib库包含了md5盐值加密解决了用户密码安全问题,案例:
from passlib.hash import pbkdf2_sha256
hash = pbkdf2_sha256.hash("123456")
print(hash)
ret = pbkdf2_sha256.verify("123456", hash)
print(ret)
ret2 = pbkdf2_sha256.verify("123457", hash)
print(ret2)
输出:
$pbkdf2-sha256$29000$fQ.h9J4zprQWopSSkrK2lg$/TY/O.E08wtDQYVNFJxp8YdZ3iE6djTLM0XN3Gid2wI
True
False