摘要算法
1、摘要算法
数据库里保存的用户密码不应该是明文,是经过算法加密后的密文
摘要算法:又称哈希算法、散列算法,它通过一个函数,把任意长度的数据转换为一个长度固定的数据串
摘要结果是不可逆的,不能被还原为原数据
常见的摘要算法:md5, sha1
import hashlib pwd = 'cc'.encode('ascii') m = hashlib.md5(pwd) print(m.hexdigest())#c9c1ebed56b2efee7844b4158905d845 s = hashlib.sha1(pwd) print(s.hexdigest())#bdb480de655aa6ec75ca058c849c4faf3c0f75b1
2、加盐算法
假如用户使用简单密码, 破解者可以用提前生成的简单密码摘要表(彩虹表)来破解原文,
所以我们会存储一个额外的信息, 扰乱用户的简单密码
# 生成一个带盐的密文 def salted_password(password, salt): def md5hex(ascii_str): return hashlib.md5(ascii_str.encode('ascii')).hexdigest() hash1 = md5hex(password) hash2 = md5hex(hash1 + salt) return hash2
3、这样在注册时保存的是加密后的密码,验证登录时也是验证加密后的密码
def salted_password(self, password, salt='kjfe**23lkf@@ii'): def sha256(ascii_str): return hashlib.sha256(ascii_str.encode('ascii')).hexdigest() hash1 = sha256(password) hash2 = sha256(hash1 + salt) return hash2 def validate_register(self): pwd = self.password self.password = self.salted_password(pwd) if User.find_by(username=self.username) is None: self.save() return self else: return None def validate_login(self): u = User.find_by(username=self.username) if u is not None: return u.password == self.salted_password(self.password) else: return False
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】