• 密码加盐


    import java.security.MessageDigest;
    import java.util.Random;

    import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;

    /**
    * @fileName Md5PasswordUtil.java
    * @Description 明文密码加密加盐操作
    * 1:生成加密密码:首先使用randomSalt获取随机盐值,并保存;再将随机盐值和明文密码传入generate生成加密密文
    * 2:密码校验:将明文密码和加密后的密文传入verify,校验成功返回true,反则返回false
    * @author user
    * @date 2017年9月6日
    * @version 1.0
    */
    public class Md5PasswordUtil {

    /**
    * 生成16位数的随机salt值
    * @return
    */
    public static String randomSalt(){
    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();
    return salt;
    }

    /**
    * 生成含有随机盐的密码
    * @param password 明文密码
    * @param salt 盐值
    * @return
    */
    public static String generate(String password,String salt) {

    password = md5Hex(password + salt);
    char[] cs = new char[48];
    for (int i = 0; i < 48; i += 3) {
    cs[i] = password.charAt(i / 3 * 2);
    char c = salt.charAt(i / 3);
    cs[i + 1] = c;
    cs[i + 2] = password.charAt(i / 3 * 2 + 1);
    }
    return new String(cs);
    }

    /**
    * 校验密码是否正确
    * @param password 明文密码
    * @param md5 加密加盐后的密码
    * @return
    */
    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());
    new HexBin();
    return new String(HexBin.encode(bs));
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    }

    }

  • 相关阅读:
    #Leetcode# 448. Find All Numbers Disappeared in an Array
    #Leetcode# 65. Valid Number
    #Leetcode# 37. Sudoku Solver
    #Leetcode# 25. Reverse Nodes in k-Group
    POJ 3264 Balanced Lineup
    HDU 3947 Assign the task
    Codeforces Round #546 (Div. 2)
    2019.08.18【NOIP?提高组】模拟 A 组 总结
    jzoj 6307. 安排
    jzoj 6305. 最小值
  • 原文地址:https://www.cnblogs.com/zeussbook/p/9530059.html
Copyright © 2020-2023  润新知