密码如何存放才算安全

数据库存放密码的方式:

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密码值比较是否一致。

猜你喜欢

转载自www.cnblogs.com/tlmbem/p/12093916.html