但我们要保存用户名密码的时候,显然明文保存是不太可取的,万一你的数据库的账号密码都被泄露了,那那些在你数据库中的密码不是都没泄露出去了吗?
所以我们要对密码进行加密。
其中md5加密是不可逆的。
(网上有很多解释都不太容易理解,下面是我自己的理解)
首先我们要知道md5是散列函数。不懂的可以查一下。哈希就是散列函数。
举一个简单的例子,我的散列函数是 x%8 那我 3%8和11%8得出来的值是一样的。 它是多对一的。 所以当然是不可逆的。
你一那边怎么知道对应多那边的哪个?但这只是一个很简单的例子,md5肯定要复杂很多。
另外经过md5加密后,得到的字符串是固定的长度,不管你之前的字符串有多长,这是md5里面的映射关系决定的。
md5也可以被暴力破解,因为如果你的密码和另外一个的用户的密码是相同的,那你们加密过后的密文也是相同的。这可以通过加盐来解决。
加盐原理
简单来说:由原来的H(p)变成了H(p+salt),相当于哈希函数H发生了变化,每次哈希计算使用的salt是随机的
H如果发生了改变,则已有的彩虹表数据就完全无法使用,必须针对特定的H重新生成,这样就提高了破解的难度。
就是在你的密码上加写数值,在用md5加密。