zoukankan      html  css  js  c++  java
  • MD5加密加盐

    Java实现MD5的随机加盐加密,这样以来就很难解密了,必须使用原密码才能正常的登录系统了,以下为Java实现的MD5随机加盐加密,以及使用Apache的Hex类实现Hex(16进制字符串和)和字节数组的互转:

     1 package com.dq.online.onlinezuul.util;
     2 
     3 import org.apache.commons.codec.binary.Hex;
     4 
     5 import java.security.MessageDigest;
     6 import java.util.Random;
     7 
     8 /**
     9  * @Author Allen.Lv
    10  * @Description //TODO
    11  * @Date 13:43 2019/4/1
    12  * @Desc: Coding Happy!
    13  **/
    14 public class Md5Utils {
    15 
    16     /**
    17      * 加盐MD5加密
    18      * <p>
    19      *
    20      * @Title : getSaltMD5
    21      * </p>
    22      * <p>
    23      * @Description : TODO
    24      * </p>
    25      */
    26     public static String getSaltMD5(String password) {
    27         // 生成一个16位的随机数
    28         Random random = new Random();
    29         StringBuilder sBuilder = new StringBuilder(16);
    30         sBuilder.append(random.nextInt(99999999)).append(random.nextInt(99999999));
    31         int len = sBuilder.length();
    32         if (len < 16) {
    33             for (int i = 0; i < 16 - len; i++) {
    34                 sBuilder.append("0");
    35             }
    36         }
    37         // 生成最终的加密盐
    38         String Salt = sBuilder.toString();
    39         password = md5Hex(password + Salt);
    40         char[] cs = new char[48];
    41         for (int i = 0; i < 48; i += 3) {
    42             cs[i] = password.charAt(i / 3 * 2);
    43             char c = Salt.charAt(i / 3);
    44             cs[i + 1] = c;
    45             cs[i + 2] = password.charAt(i / 3 * 2 + 1);
    46         }
    47         return String.valueOf(cs);
    48     }
    49 
    50     /**
    51      * 使用Apache的Hex类实现Hex(16进制字符串和)和字节数组的互转
    52      * <p>
    53      *
    54      * @Title : md5Hex
    55      * </p>
    56      * <p>
    57      * @Description : TODO
    58      * </p>
    59      */
    60 //    @SuppressWarnings("unused")
    61     private static String md5Hex(String str) {
    62         try {
    63             MessageDigest md = MessageDigest.getInstance("MD5");
    64             byte[] digest = md.digest(str.getBytes());
    65             return new String(new Hex().encode(digest));
    66         } catch (Exception e) {
    67             e.printStackTrace();
    68             System.out.println(e.toString());
    69             return "";
    70         }
    71     }
    72 
    73 
    74     /**
    75      * 验证加盐后密码是否还相同
    76      * @param password
    77      * @param md5str
    78      * @return
    79      */
    80     public static boolean getSaltverifyMD5(String password, String md5str) {
    81         char[] cs1 = new char[32];
    82         char[] cs2 = new char[16];
    83         for (int i = 0; i < 48; i += 3) {
    84             cs1[i / 3 * 2] = md5str.charAt(i);
    85             cs1[i / 3 * 2 + 1] = md5str.charAt(i + 2);
    86             cs2[i / 3] = md5str.charAt(i + 1);
    87         }
    88         String Salt = new String(cs2);
    89         return md5Hex(password + Salt).equals(String.valueOf(cs1));
    90     }
    91 
    92 }

    参考文献:

    https://blog.csdn.net/Hello_World_QWP/article/details/78913096

  • 相关阅读:
    Https 原理与工作流程及证书链校验
    ORA-12516, TNSlistener could not find available handler with matching protocol stack
    报表框架整合记录20210422
    Spring MVC
    JasperReports with Spring
    Spring Boot + Jasper Report + MySQL Database Example
    Spring Boot + Jasper Report Example
    JasperReports with Spring Boot
    Spring 4 Jasper Report integration example with mysql database in eclipse
    JasperReports Java Spring project
  • 原文地址:https://www.cnblogs.com/javallh/p/10635982.html
Copyright © 2011-2022 走看看