美文网首页
加盐加密

加盐加密

作者: 艺术农 | 来源:发表于2018-05-22 09:52 被阅读127次

背景

涉及身份验证的系统都需要存储用户的认证信息,常用的用户认证方式主要为用户名和密码的方式,为了安全起见,用户输入的密码需要保存为密文形式,可采用已公开的不可逆的hash加密算法,比如SHA256, SHA512, SHA3等,对于同一密码,同一加密算法会产生相同的hash值,这样,当用户进行身份验证时,也可对用户输入的明文密码应用相同的hash加密算法,得出一个hash值,然后使用该hash值和之前存储好的密文值进行对照,如果两个值相同,则密码认证成功,否则密码认证失败。

由于密码是由用户设定的,在实际应用中,用户设置的密码复杂度可能不够高,同时不同的用户极有可能会使用相同的密码,那么这些用户对应的密文也会相同,这样,当存储用户密码的数据库泄露后,攻击者会很容易便能找到相同密码的用户,从而也降低了破解密码的难度,因此,在对用户密码进行加密时,需要考虑对密码进行掩饰,即使是相同的密码,也应该要保存为不同的密文,即使用户输入的是弱密码,也需要考虑进行增强,从而增加密码被攻破的难度,而使用带盐的加密hash值便能满足该需求。

加密盐的实现方法

加密存储

输入: 密码字符串passWord

输出:盐值 salt 、密码密文passWordHash

函数:加密hash函数

其中:“盐值 salt”是在加密过程中生成的随机字符串;

可以将salt放到passWord前面作为前缀或放到passWord后面作为后缀得到新的字符串PS,即,PS = password和salt的组合串;

密码密文passWordHash = Hash加密函数(PS );

将用户名、密码密文passWordHash和盐值salt一起保存到数据库中。

密码校验

输入: 密码字符串passWordCur

输出:密码校验是否成功

处理:

  1. 取出当前用户密码加密时使用的盐值salt

  2. 得到本次输入的密码passWordCur和盐值salt的组合字符串PS

  3. 得出本次输入密码的密文passWordHashCur= Hash加密函数(PS );

  4. 比较passWordHashCur和用户最初设置的密码密文passWordHash是否一致,如果一致,则校验成功,否则校验失败。

常用的密码攻击方式

加盐的目的是为了增加攻击者破解的难度,那么在加盐的时候要注意以下几点,否则加盐的意义也不会太大。

  • 盐值不能太短;如果盐值只有少数两三位甚至一两位的话,攻击者完全可以穷举所有可能的盐值;关于盐值长度的一个经验值是长度至少要和hash加密函数的返回值长度保持一致。

  • 盐值不能固定;如果系统使用了固定的盐值,那么和不加盐相当于是一回事了,攻击者完全可以使用该固定的盐值提前准备密码表;另外,相同密码对应的hash值仍然是一样的,仍然无法对密码相同这一事实进行掩饰。

  • 不要使用能提前预知的值作为盐值;如果盐值能提前得知或提前推断出,攻击者也完全可以根据提前预知的盐值准备密码表,从而对破解的难度也增加不了多少。

  • 每一次修改密码重新计算hash值时,要重新生成新的盐值,不要使用上次密码对应的盐值;因为如果用户密码泄露之后,盐值相应的也就泄露了,用户修改密码时,如果还沿用原来的盐值,攻击者也仍然可以根据上次的盐值提前准备密码表,从而使攻破可能性变得更高了。

参考资料

相关文章

  • nodejs 关于密码加密

    加密分为 直接加密、加盐加密 加盐加密更安全,建议加盐 登录时为输入密码再次同盐值加密比对数据库内的加密密码即可判...

  • 加盐加密

    背景 涉及身份验证的系统都需要存储用户的认证信息,常用的用户认证方式主要为用户名和密码的方式,为了安全起见,用户输...

  • 加盐加密

    1.什么是加盐? 加盐其实就是为了应对这样一种情况:如果有两个或以上的用户的密码相同,那么单纯通过MD5等加密方式...

  • Shiro 加盐加密

    开头一段废话 加盐加密会使用户的密码受到相对安全的保护,比普通的MD5加密要好。用户数据暴露给了用户,因为有盐值的...

  • laravel密码加密

    Laravel框架中 (1) 辅助方法:'加盐' 加密解密 : (2)门面:Hash加密和验证

  • 016-谈谈 iOS开发中常用的加密方案

    一句话:MD5、SHA1、加盐、AES加密、RSA加密。

  • MD5加盐

    参考 浅谈MD5加密算法中的加盐值(SALT) 一种简单的给MD5加盐算法 md5密码加盐 对用户密码进行加盐处理

  • java hmac加盐加密

  • MD5加盐加密

    package com.ff.common.util; import java.security.MessageD...

  • CAS单点登录-自定义认证之JDBC+MD5(四)

    本章节的内容为JDBC认证,查找数据库进行验证,其中包括: 密码加密策略(无密码,简单加密,加盐处理) 认证策略(...

网友评论

      本文标题:加盐加密

      本文链接:https://www.haomeiwen.com/subject/qzthjftx.html