值得推荐:密码加盐值(salt值)的原理和作用

值得推荐:密码加盐值(salt值)的原理和作用

 

图片[1]-值得推荐:密码加盐值(salt值)的原理和作用-名将VR全景博客

SALT值属于随机值。用户注册时,系统用来和用户密码进行组合而生成的随机数值,称作salt值,通称为加盐值。

1、背景:系统通常把用户的密码如MD5加密后,以密文形式保存在数据库中,来防止黑客偷窥。

2、产生:随着对MD5密文查询工具的出现,而很多用户的密码又设置简单,单纯的对用户密码进行MD5加密后保存,用密文很容易就能反查询得到某用户的密码。

3、原理:为用户密码添加Salt值,使得加密的得到的密文更加冷僻,不宜查询。即使黑客有密文查询到的值,也是加了salt值的密码,而非用户设置的密码。salt值是随机生成的一组字符串,可以包括随机的大小写字母、数字、字符,位数可以根据要求而不一样。

4、用途:当用户首次提供密码时(通常是注册时),由系统自动添加随机生成的salt值,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的加盐值,然后散列,再比较散列值,已确定密码是否正确。

5、其它:经过添加salt值处理的密码,即使用户设置的原密码是相通的,数据库中的密文却是不同的。

 

图片[2]-值得推荐:密码加盐值(salt值)的原理和作用-名将VR全景博客

另外参考文章:

在讲述密码加盐之前,我们先梳理一下,我们常见的密码及加密方式
明文密码
所谓明文密码就是没有对密码做任何加密措施,前台传到后台的是 “123456”,后台数据库中保存的就是”123456″,这种密码没有什么安全可言,数据库被拷走,那么用户的信息就被连锅端了。

简易密码加密
所谓简易密码加密,就是后台服务自己定义一些简单的加密方式,如:密码反着存、密码加前后缀、密码字符串中指定字符被替换等等。这种密码乍看有点加密的意思,但是你都被黑客大哥给攻破了,你的数据库,后台加密程序都被人家拿走了,那不还是相当给人家的明文嘛。所以也很不安全。

MD5 加密
我知道的第一个正经的加密方式就是MD5, 因为MD5加密是非对称加密,是不可逆的。就是给你用MD5算法加密后的字符串,你是没有任何算法可以反向推算出原始密码的。既然反向推算不出来,那就很安全了吧。也不尽然。因为同一个文本通过MD5加密后,生成的密文是固定不变的,所以通过彩虹表进行撞库,还是能简简单单的破译你的密码。

密码加盐
MD5算法的加密方式,其实挺好的,但是固定长度的纯文本加密容易被撞库,既然如此,那么我们就在保存到数据库之前,在把被MD5加密过后的字符串添加点东西,主要身份就是“搅屎棍”,也被称之为加盐。原来是这样的MD5(password), 现在是这样的MD5(MD5(password) + salt),或者是其他算法,这里的salt就是“盐”,是后台服务器在保存密码时,生成的一段随机数串,这样生成最终加盐后的字符串就很安全了。

对称加密与非对称加密
对称加密
对称加密中,加密和解密使用同一把钥匙,数据发送方与接收方在数据传输前商定出一把共用的密钥,发送方数据传输前使用密钥进行加密,密文传输给接收方,接收方使用密钥进行解密,获得原始数据。

非对称加密
非对称加密,就是一共有两把钥匙,公共密钥与私有密钥。二者是成对存在的,使用公钥加密后,必须使用私钥才能解密出原始数据。数据发送方使用公钥对数据进行加密,数据发送到数据接收方,数据接收方使用私钥对密文进行解密,获得原始数据。

比较
对称加密
优点:算法简单,效率高,速度快。
缺点:不安全,密文与密钥泄露,数据也就泄露了。

非对称加密
优点:安全,即使公钥泄露,如果不同时获取到私钥,也无法解析出密文。所以数据接收方要保护好私钥。
缺点:算法相对复杂,加密与解密过程效率相对很低。

密码加盐
密码加盐主要是针对用户的登录密码而言的,原始密码经过MD5(一种Hash算法)加密后,一些固定长度的简单纯文本密码的密文也会被破解出来。因为同一串字符的Hash加密后的密文是固定不变的。所以还是会被破解。

破解的常用方法有暴力破解和字典破解,也是最笨拙的方法,就是一个一个试。所以二者的破解方法在时间(速度)和空间(存储)上都需要很大的资源,这样破解密码的效率极低。

此路不通就另择他法,比如,使用彩虹表进行反向推出你的密码,彩虹表中是一些常用的固定长度的纯文本的哈希值,当这张表越大,破解密码的机率就越大。所以对于使用哈希算法加密的方式也就不那么安全了。如果被加密的原文不是固定的,那样彩虹表就很难进行哈希码对照了。也就更安全了。

这种方法就是常说的“加盐”。盐(Salt)就是一个随机生成的字符串,每次修改密码或者操作,都会生成新的随机字符串,将原始密码进行哈希算法之后,进行加盐,就是把随机字符串混入到密码哈希值中,再将这个值再次进行哈希算法计算,这样生成的密文就更安全了。

MD5(MD5(password) + salt) 加盐算法

这样密码就很安全了。我们需要把盐保存起来,一般建议盐的保存位置与密文在不同的库中。因为用户登陆时我们需要使用用户输入的密码明文与盐进行上面的双重哈希算法计算出密文与数据库中的密文进行对比是否相同。如果盐被整丢了,那就完犊子了,因为上面的MD5算法需要两个参数(密码原文与盐),缺一不可。没有盐,就无法计算出密文进行对比。

 

 

转载请保留原文链接:http://blog.hzzx3d.com/3076.html

 

© 版权声明
THE END
喜欢就支持一下吧
点赞68 分享
相关推荐