python密码加密

一、Flask框架中常用的哈希加密模块:werkzeug.security

# Flask中常用的哈希加密方式
from werkzeug.security import generate_password_hash,check_password_hash
#明文密码
password = 'sk123456'
#将密码转为密文,不支持反解,并且相同的字符每次生成的密文也不一致
pwd_hash1 = generate_password_hash(password)
pwd_hash2 = generate_password_hash(password)

print(pwd_hash1,pwd_hash2,sep='\n')
#打印结果:密文并不相同
# pbkdf2:sha256:50000$HKeHb1Dd$85c5b50a6a008b438f3edacca3a880faefd62c9bc2636a15032585cc3b39ff59
# pbkdf2:sha256:50000$G8cgslH9$803c24a78461bd00b9d879f3b91e70ffc89a435fa3dd48cee4544a6760186be5
#check方法可匹配密文和明文是否对应一致,返回bool值
result = check_password_hash(pwd_hash1,password)
print(result)  #True

二、hashlib中的两种加密算法:sha1和MD5

  1. sha1:全称是Secure Hash Algorithm(安全哈希算法)
    sha1基于md5,加密后的数据比md5多32位因此,相对md5更加安全,同时运算速度较低
# hashlib加密示例
import hashlib
pwd = 'sk123'

#创建sha1对象
sha1 = hashlib.sha1()
#对字符进行加密,默认支持字节串,字符串须先编码
sha1.update(pwd.encode())
#获取加密后的数据(字符串)
res1 = sha1.hexdigest()
# res1 = sha1.digest()  这个返回的是字节穿
print(res1,type(res1)) 
#打印结果:7c610fefe783705bb3ff23bed147d7e1e4a213c7 <class 'str'>
  1. md5:全称是Message-Digest Algorithm 5(信息-摘要算法)
    128位长度,是一种不可逆算法,它对应任何字符串都可以加密成一段唯一的固定长度的代码。
md5 = hashlib.md5()
md5.update(pwd.encode())
res2 = md5.hexdigest()
print(res2,type(res2))

3.update覆盖问题
两次加密相同的内容,得到的密文不一致,第二次实际加密的字符串是 ‘123123’

import hashlib

sha1 = hashlib.sha1()
sha1.update('123'.encode())
res1 = sha1.hexdigest()
print(res1)  #40bd001563085fc35165329ea1ff5c5ecbdbbeef

sha1.update('123'.encode())
res2 = sha1.hexdigest()
print(res2)  #601f1889667efaebb33b8c12572835da3f027f78

将加密的过程封装在函数中可解决这个问题

import hashlib

def func(s):
    a = hashlib.sha1()     
    a.update(s.encode())
    res = a.hexdigest()
    return res

pwd1 = func('123')
pwd2 = func('123')
print(pwd1,pwd2) #两个结果一致:40bd001563085fc35165329ea1ff5c5ecbdbbeef

4.sha1和md5的加密过程均不可逆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值