• MD5随机盐值生成法


    public class Test3 {
    
    /** 
    * 生成含有随机盐的密码 
    */ 
    public static String generate(String password) { 
    Random r = new Random(); 
    StringBuilder sb = new StringBuilder(16); 
    sb.append(r.nextInt(99999999)).append(r.nextInt(99999999)); 
    int len = sb.length(); 
    if (len < 16) { 
    for (int i = 0; i < 16 - len; i++) { 
    sb.append("0"); 
    } 
    } 
    String salt = sb.toString(); 
    password = md5Hex(password + salt); 
    char[] cs = new char[48]; 
    for (int i = 0; i < 48; i += 3) {
    //取MD5后密文的第一位
    cs[i] = password.charAt(i / 3 * 2);
    
    //取盐值的第一位
    char c = salt.charAt(i / 3); 
    cs[i + 1] = c;
    
    //取MD5后密文的第二位
    cs[i + 2] = password.charAt(i / 3 * 2 + 1); 
    }
    
     
    
    //生成的密文包括MD5的密文和盐值,顺序为一位密文,一位盐值,一位密文
    return new String(cs); 
    } 
    
    /** 
    * 校验密码是否正确 
    */ 
    public static boolean verify(String password, String md5) { 
    char[] cs1 = new char[32]; 
    char[] cs2 = new char[16]; 
    for (int i = 0; i < 48; i += 3) { 
    cs1[i / 3 * 2] = md5.charAt(i); 
    cs1[i / 3 * 2 + 1] = md5.charAt(i + 2); 
    cs2[i / 3] = md5.charAt(i + 1); 
    } 
    String salt = new String(cs2); 
    return md5Hex(password + salt).equals(new String(cs1)); 
    } 
    
    /** 
    * 获取十六进制字符串形式的MD5摘要 
    */ 
    public static String md5Hex(String src) { 
    try { 
    MessageDigest md5 = MessageDigest.getInstance("MD5"); 
    byte[] bs = md5.digest(src.getBytes()); 
    return new String(new Hex().encode(bs)); 
    } catch (Exception e) { 
    return null; 
    } 
    } 
    
    public static void main(String[] args) { 
    String password = generate("admin");
    System.out.println(password);
    System.out.println(verify("admin", password)); 
    }
  • 相关阅读:
    win10 的MQTT + apache-apollo服务器使用
    网络协议 4
    nginx 命令
    win7安装两个jdk,1.7和1.8,下载、安装、配置环境变量,方便切换
    AC+DP练习
    BZOJ 1093 [ZJOI2007]最大半连通子图
    BestCoder Round #52 (div.1)
    洛谷1012 拼数
    洛谷1980 计数问题
    洛谷1424 小鱼的航程(改进版)
  • 原文地址:https://www.cnblogs.com/lupeng2010/p/6061739.html
Copyright © 2020-2023  润新知