Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理 |
您所在的位置:网站首页 › m5注册登录 › Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理 |
前言
在开发的时候,有一些敏感信息是不能直接通过明白直接保存到数据库的。最经典的就是密码了。如果直接把密码以明文的形式入库,不仅会泄露用户的隐私,对系统也是极其的不厉,这样做是非常危险的。 那么我们就需要对这些铭文进行加密。 Java常用加密手段现在市场是加密的方式已经有很多了,像Base64加密算法(编码方式),MD5加密(消息摘要算法,验证信息完整性),对称加密算法,非对称加密算法,数字签名算法,数字证书,CA认证等等。。 场景加密手段应用场景Base64应用场景:图片转码(应用于邮件,img标签,http加密) MD5应用场景:密码加密、imei加密、文件校验 非对称加密:电商订单付款、银行相关业务 MD5加密的风险如果直接使用MD5进行加密,其实是不安全的,这是是可以验证的,比如下面这个例子: 我直接使用MD5对123456的密码进行加密。看着很牛是吧,一串随机数,但是其实一碰就碎 接下来就使用大家常用的一个网站进行破解:MD5破解网站 把刚才生成的MD5加密后的密码进行解密。 轻松破解,别说黑客了,这个网站都能破解出来,那风险有多大就不用说了 所以我们需要采取一些措施,用于二次不强MD5加密后的密码,针对这种方式,现在大多数采取的方式就是加盐 什么是盐?盐(salt)一般是一个随机生成的字符串或者常量。我们将盐与原始密码连接在一起(放在前面或后面都可以),然后将拼接后的字符串加密。salt这个值是由系统随机生成的,并且只有系统知道。即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,散列值也是不同的。 加salt可以一定程度上解决这一问题。所谓加salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确。 这样也就变成了将密码+自定义的盐值来取MD5。但是如果黑客拿到了你的固定的盐值,那这样也不安全了。所以比较好的做法是用随机盐值。用户登陆时再根据用户名取到这个随机的盐值来计算MD5。 个人建议把盐设置成随机数而不是常量,这样更加安全。 引入MD5工具类坐标如下: commons-codec commons-codec 编写MD5加盐工具类这种对铭文加密的操作,我们可以封装成一个工具类,在这里我们主要进行对明文密码进行MD5加密,并且进行二次加盐加密,以及对比加盐后的密码和初始密码是否相同。 直接把全部代码附上: package com.wyh.util; import org.apache.commons.codec.binary.Hex; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; /** * @Author 魏一鹤 * @Description 将明文密码进行MD5加盐加密 * @Date 23:18 2023/2/7 **/ public class SaltMD5Util { /** * @Author 魏一鹤 * @Description 生成普通的MD5密码 * @Date 23:17 2023/2/7 **/ public static String MD5(String input) { MessageDigest md5 = null; try { // 生成普通的MD5密码 md5 = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { return "check jdk"; } catch (Exception e) { e.printStackTrace(); return ""; } char[] charArray = input.toCharArray(); byte[] byteArray = new byte[charArray.length]; for (int i = 0; i |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |