关于盐加密你需要了解的
什么是盐,盐加密是什么
盐
:密码学中是指通过在密码任意固定位置插入特定字符串,让散列后的结果和使用原始密码的散列结果不相符,这样一个过程我们称之为“加盐”。
盐值 是一组随机的字符串,系统随机生成;Salt可以插在最前面、最后面,也可以插在中间,可分开插入也可倒序。
拓:
第一代密码 => 数据库明文存储,一旦数据库泄露,用户数据全部泄漏第二代密码 => 数据库加密存储,典型加密算法有 MD5 和 SHA1 ,数据库存储的密码为加密后的密文。但理论上来说不能被解密,即时数据库丢失,由于存储为密文,故根本无法判断用户原始密码。
第三代密码 => 数据库存储MD5加密后的 {明文密码+Salt} 即 MD5(明文密码+salt),进行加盐处理,当密码设置过于简单,第二代密码加密方式也并不可靠了,也常容易被破解。数据库加入一个Salt盐值字段【salt可以是任意字母、数字、或字母数字的组合,必须是随机产生的】,每个用户Salt值均不相同。
加盐加密 是一种对系统登录口令加密的方式,它的实现方式是将每一个口令同一个叫做"盐"salt的n位随机数相关联。 只要口令改变,随机位数就改变。随机数以未加密方式存于口令文件中,每个人可读;不再只是保存加密过的文件,而是先将口令和随机数连接起来一同加密,加密后结果存于口令文件中。
为什么要使用盐加密
在我们实际应用中,出于安全的考虑和数据的保密,常常需要使用到加密算法,一些网站的数据库管理着用户的ID及口令,口令以MD5等加密后的形式存在,但是有些时候可能数据库泄露问题。为解决这种问题,可以考虑盐化的方式,比如存密码不再只是使用传统的明文存储方式,而是可以采用 Hash+Salt (哈希加盐法) 的方式进行密码的存储,这种加入盐值的方式可以防止黑客暴力破解用户ID和口令。
盐值→通过插入在口令后进行HASH算法,即便是相同的口令,插入不同的盐值后生成的HASH值也是不相同的,由于MD5的不可逆性,想要逆向破解MD5也是非常耗时间的。
具体的流程是:
用户注册时:
1、用户在网站注册时提供ID与口令 → 2、系统为用户分配盐值 → 3、盐值插入口令后进行HASH → 4、将ID,HASH值与盐值存入数据库
身份验证时:
1、用户提供ID与口令 → 2、系统在数据库中通过用户提供的ID查找HASH值与盐值 → 3、将盐值插入用户提供的口令后进行HASH → 4、将HASH值与数据库中的HASH值比较,相等则验证成功,反之验证失败