密码如何存放才算安全

数据库存放密码的方式:

1 直接保存密码的明文值,这就有问题,如果你的用户表被别人Select了,所有的用户名和密码都一目了然了,这样的系统是最危险的。

2 保存经过MD5加密的密文值,方式2的安全性比方式1的就高了很多,就算让你Select了用户表,你也无法直接知道用户的密码,只要你的密码强度够的话就算无限硬匹配MD5值也需要很长时间。这是不是意味着密码安全了,当然不是。如果一个企业对账号和密码的安全性要求很高时,这种方式是达不到要求的。举个例子如果某个数据库管理员拥有管理用户表的权限,这就很危险了。假如有一个用户名为System密码为"abcd@1234_test"(d2586afe2698192fabfa70119aed37ab),要应匹配"abcd@1234_test"是需要一定难度的,如果那个数据库管理员把用户的密码改成"123"(202cb962ac59075b964b07152d234b70) ,这时候就可以用System和123 成功登陆系统了。就有下面第3种方式了。

3 保存经过MD5和AES加密的密文,首先我们先把密码用MD5加密,然后用AES加密(把用户名和MD5密文用指定格式拼接)得到的结果就是我们要保存到数据库的密码密文值,这样一来相同的密码在不同的用户名下的密文值是唯一的(前提用户名是唯一的,一般情况下用户名都是唯一的)。这样就能防止直接更改用户表的密码值。应用程序在做密码校验时应该先用用户名Select出该用户,把用户密码的密文值用AES解密得出(用户名和MD5密文用指定格式拼接)通过判断AES解密出来的用户名和传入来的用户名是否一致来确认该用户数据库的密码是否被募改过,如果一致则没有被募改过,再把传进来的密码经过MD5加密后和AES解密出来的MD5密码值比较是否一致。

posted @   唧唧复唧唧木兰当户织  阅读(4214)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示