• 用于对项目中密码生成MD5摘要和加盐的工具类


    import java.security.MessageDigest;
    /**
    * 用于对项目中密码生成MD5摘要和加盐的工具类 
    * @author 大别山人
    */
    public final class MD5Util {
    private static final char[] hexadecimal = {'0','1','2','3','4','5','6',
    '7','8','9','a','b','c','d','e','f'};
    
    /**
    * 根据指定的字符串,返回对应的MD5摘要结果
    * @param data 要生成摘要信息的字符串
    * @return
    */
    public static final String toMD5(String data) {
    if(data == null) {
    throw new NullPointerException("参数字符串不能为空!");
    }
    try {
    MessageDigest digest = MessageDigest.getInstance("md5");
    byte[] binaryData = digest.digest(data.getBytes("utf-8"));
    char[] buffer = new char[2*binaryData.length];
    for (int i=0; i<binaryData.length; i++) {
    int low = binaryData[i] & 0x0f;
    int high = (binaryData[i] & 0xf0) >> 4;
    buffer[i*2] = hexadecimal[high];
    buffer[i*2 + 1] = hexadecimal[low];
    }
    return String.valueOf(buffer);
    } catch (Exception e) {
    e.printStackTrace();
    return "";
    }
    }
    /**
    * 根据参数返回加盐的md5摘要
    * @param param
    * @return
    */
    public static final String toMD5Salt(String param) {
    //获取参数字符串的一次MD5的结果
    String md5 = toMD5(param);
    //将上面结果和参数字符串拼接后的hash码,作为盐
    int hashCode = (param+md5).hashCode();
    //将盐和第一次MD5的结果和参数字符串拼接起来,再次MD5运算
    md5 = toMD5(hashCode+md5+param);
    //根据上面得到的哈希码的最低16位获取一个1到16的值
    int i = (hashCode&0xF) + 1;//结果是1到16
    //将第二次MD5的结果根据上面的结果重新排列
    md5 = md5.substring(i, 16 + i) + md5.replace(md5.substring(i, 16 + i), "");
    //返回重新排序的MD5
    return md5;
    }
    }
  • 相关阅读:
    钾 动态规划
    镁 细节
    锌 填坑计划
    钠 GZY整理贪心
    javascript+Java 实现MD5加密登录密码
    FCKeditor2.6.4图片上传,中文名乱码,红叉各种问题解决
    Java 随机生成验证码,支持大小写字母、数字、随机字体
    BI BI系统监控
    使用ETL控件还是存储过程
    fsync与数据库日志刷新
  • 原文地址:https://www.cnblogs.com/pf1988/p/9144578.html
Copyright © 2020-2023  润新知