使用MD5+盐对密码进行加密
为什么要对密码加密?
因为密码存储的时候不能明文存贮,对密码加密可以保护用户信息安全
什么是对称加密?
对称加密:A拿着一个规则进行加密,B拿着这个规则解密
为什么要加盐?
为防止字典破解和暴力破解的破解方式来破解。如果知道了数据库中密码的哈希值,用查表法,逆向查表法、彩虹表等。当知道某个密码的哈希值时,只需要在建立好的表中查找该值,你就知道对应的密码,盐就是一个随机生成的字符串。我们将盐与原始密码连接(concat)在一起(放在前面或后面都可以),然后将concat后的字符串加密。采用这种方式加密密码,查表法就不灵了(因为盐是随机生成)
密码加盐的实现方式?
// 获取用户密码 String userPwd = user.getUserPwd(); // 获取盐值 String salt = getRandomString(4); // 盐值加上密码 String password = salt + userPwd; // 对加上盐值的密码进行加密 String md5 = EncryptionUtils.encryptMD5(password); // 把加密后的密码存到user对象中 user.setUserPwd(md5); // 把盐值存入user对象中 user.setUsersSalt(salt);
可以把盐加在密码前面,也可以把盐加在密码后面,同时也可以加在中间,如果还嫌不够安全,也可以加多个盐值,也就是多重加盐,会更安全更保险。
生成盐的方法
//length用户要求,随机产生字符串的长度 public static String getRandomString(int length){ String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; Random random = new Random(); StringBuffer sb = new StringBuffer(); for(int i = 0;i < length ; i++){ int number = random.nextInt(62); sb.append(str.charAt(number)); } return sb.toString(); }
MD5加密工具类
public class EncryptionUtils { public static String encryptMD5(String password) { MessageDigest md = null; byte[] digest = null; try { md = MessageDigest.getInstance("MD5"); digest = md.digest(password.getBytes(StandardCharsets.UTF_8)); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } assert digest != null; return new BigInteger(1, digest).toString(16); } public static void main(String[] args) { System.out.println(encryptMD5("0")); } }

浙公网安备 33010602011771号