说到用户密码的设计肯定要说丅,哈希算法哈希算法并不是一个特定的算法而是一类算法的统称。哈希算法也叫散列算法一般来说满足这样的关系:f(data)=key,输入任意长喥的data数据经过哈希算法处理后输出一个定长的数据key。同时这个过程是不可逆的无法由key逆推出data。HASH函数运用在字典表等需要快速查找的数據结构中他的计算复杂度几乎是O(1),不会随着数据量增加而增加
md5、sha也是一种哈希算法
1、源数据(可以很大字符串、音频、视频,任意文件)映射成一串数字与之对应(哈希函数完成可以自己定义)
2、key长度固定(映射的一串数字就是加密字符串用户密码,如比特币)长度越大一般碰撞空间越大越抗碰撞
3、不可逆,无法由key推出对应的源文件如不能计算出原密码,或者根据哈希值计算出源文件是一部电影
通常设计密码除了md5以外,防止数据库的哈希值一样需要“加盐”如果两个用户的密码都是123456
那么通过哈希算法得到的值肯定都是一样如md5(123456)数据库里這两个用户的密码表现肯定是两个相同的哈希字符串。为了防止sql泄露以后密码被猜测出来,可以通过“加盐”的方式md5(用户密码+随机数+訪问时间的毫秒时间戳)这样即使A/B用户的密码都是123456,他们的密码在数据库里面的表现也不可能是两个相同的加密字符串