用于对项目中密码生成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;
}
}

原文地址:https://www.cnblogs.com/pf1988/p/9144578.html

时间: 2024-12-09 13:40:59

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

JAVA 生成 MD5摘要 和SHA1摘要 及MD5的彩虹表破解

MD5  和SHA1 这两个摘要算法,使用很普遍,几乎每个项目我们都会用这两个算法来骗自己和骗用户,看啊,我们保存的用户密码是加密的.对,存的不是明文,是密文.然而MD5真的安全么? 上干货 JAVA生成MD5摘要的代码: MessageDigest md5 =MessageDigest.getInstance("MD5");         String messageStr="123456";         md5.update(messageStr.getB

系统管理模块_用户管理1_实现用户有关的功能_测试功能、解决事务的问题、对密码进行MD5摘要

系统管理模块__用户管理1__实现用户有关的功能 了解用户管理要做什么(增删改查初始化密码) 设计实体 分析功能有几个对应几个请求 增删改查有6个请求,初始化密码一个 实现增删改查一组功能的步骤流程 一.做Action相关的准备: Action.JSP.配置 二.做Service相关的准备: 接口.实现类.配置 三.填空: Action方法.Service方法.JSP页面 实现一组功能的步骤(一) 以User为例: 一.做Action相关的准备 1,创建 MyAction extends Bas

在Vue项目中动态生成二维码 阿星小栈

一.使用jquery.qrcode生成二维码 1.首先在页面中加入jquery库文件和qrcode插件 <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.qrcode.min.js"></script> 2.在页面中需要显示二维码的

用于JS日期格式化,以及简单运算的Date包装工具类

1. [文件] yDate.js/** * | yDate.js | Copyright (c) 2013 yao.yl | email: [email protected] | Date: 2012-09-03 | */(function(global) {     var objectPrototypeToString = Object.prototype.toString;     var isDate = function(value) {        return objectPro

Maven项目中mvn clean后找不到測试类问题

在Maven项目中进行单元測试,但mvn clean后又一次mvn install项目,再次进行单元測试.会有下面的错误. <span style="font-family:KaiTi_GB2312;font-size:18px;">Class not found com.core.order.service.impl.OrderServiceImplTest java.lang.ClassNotFoundException: com.core.order.service.

项目中的常量是放在接口里还是放在类里呢?

接口只用于定义类型 ??当类实现接口时,接口就充当可以引用这个类的实例的类型(type).因此,类实现了借口,就表明客户端可以对这个类的实例实施某些动作.为了任何其他目的而定义接口是不恰当的. ??有一种接口被称为常量接口(constant interface),亚布妈祖上面的条件.这种接口没有包含任何方法,它只包含静态的final域,每个域都导出一个常量.使这些常量的类实现这个借口,以避免类名来修饰常量名. // Constant interface antipattern - do not

Java使用Zxing生成、解析二维码工具类

Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法. 1.二维码的生成 (1).将Zxing-core.jar 包加入到classpath下. (2).二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的; package com.qlwb.business.util; //导入省略... /** * 二维码工具类 * */ public class MatrixToLogoImageWriter { priva

结合AnyChart做报表:一个生成AnyChart图形XML数据的工具类

今天头有点痛,所以不能详细地写了,先把代码贴上来,等身体状况稍微好一点,再继续完善. 1.(主角)一个使用XML模板生成Anychart XML数据的工具类 /** * */ package com.common.anychart; import java.io.InputStream; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.l

spring应用于web项目中

目标: 在webapp启动的时候取到spring的applicationContext对象,并把applicationContext对象存到servletContext里面,在需要的时候直接从servletcontext里面拿出来用 步骤: 1.加入spring jar包 2.建一个bean: package com.hy.bean; /** * * @author Administrator * */ public class Person { private String name; pub