博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于盐+Sha算法的安全密码保护机制
阅读量:6156 次
发布时间:2019-06-21

本文共 1366 字,大约阅读时间需要 4 分钟。

  密码通过加盐后,可以增加密码的复杂度,即便最简单的密码,在加盐后,也能变成复杂的字符串,这大大提高了密码破解的难度。但是如果将盐硬编码在程序中或随机一次生成的,每个密码进行hash使用相同的盐会降低系统的防御力,因为相同密码的hash两次后的结果也是一样的。所以比较正确的做法是每次创建用户或修改密码都使用一个新的随机盐


  很多用户可能想到了将用户名作为盐的方案,虽然对于每一个用户来说用户名可能是不同的,但是用户名是可预测的,并不是完全随机的。***者完全可以用常见的用户名作为盐来制作查询表和彩虹表破解hash。


  我们通常使用密码学上可靠安全的伪随机数生成器(Cryptographically Secure Pseudo-Random Number Generator (CSPRNG))来生成盐。正如它的名字说明的那样,CSPRNG提供一个高标准的随机数,是完全无法预测的。在Java中,可以使用生成。


  此外,在web应用中,我们要在服务端进行Hash,而不是客户端。因为如果Hash在客户端的话,即便传输的不是明文,如果恶意的***获取了用户的Hash,就可以直接登录帐号了。甚至都不需要知道客户的明文密码,也就不需要破解Hash了。我们需要记得客户端Hash并不是HTTPS的替代品

/**	 * 获取随机盐	 * @return	 */	public static String getSalt(){		SecureRandom sr;	    byte[] salt = new byte[16];	    try {	      sr = SecureRandom.getInstance("SHA1PRNG", "SUN");	      sr.nextBytes(salt);	    } catch (Exception e) {	      e.printStackTrace();	    } 	    	    return salt.toString();	}
/**	 * sha2 加盐加密	 * @param encryptStr 需要加密的字符串	 * @param salt 盐	 * @return	 */	public static String sha2EncryptSalt(String encryptStr, String salt){		MessageDigest md = null;        String encryptCode = null;        byte[] bt = (encryptStr + salt).getBytes();        try {            md = MessageDigest.getInstance("SHA-256");            md.update(bt);            encryptCode = bytes2Hex(md.digest());         } catch (NoSuchAlgorithmException e) {            return null;        }        return encryptCode;	}

转载地址:http://vuifa.baihongyu.com/

你可能感兴趣的文章
Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
查看>>
Olap学习笔记
查看>>
Codeforces Round #431 (Div. 1)
查看>>
如何进行数组去重
查看>>
将标题空格替换为 '_' , 并自动复制到剪切板上
查看>>
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>
第二章
查看>>
android背景选择器selector用法汇总
查看>>
[转]Paul Adams:为社交设计
查看>>
showdialog弹出窗口刷新问题
查看>>
java
查看>>
Vue.js连接后台数据jsp页面  ̄▽ ̄
查看>>
关于程序的单元测试
查看>>