新建一个MD5Util类
package com.demo.car;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* @author 杰
* @category MD5Util
* @version 2019年4月19日
*/
public class MD5Util {
/**
* 方法
*/
//Java中MD5加密的实现方式
public static String getMD5String(String str) {
try {
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算md5函数
md.update(str.getBytes());
// digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
//一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)
return new BigInteger(1,md.digest()).toString(16);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//这里主要是遍历8个byte,转化为16位进制的字符,即0-F
private static String byteArrayToHexString(byte b[]) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < b.length; i++) {
buffer.append(byteToString(b[i]));
}
return buffer.toString();
}
//这里是针对单个byte,256的byte通过16拆分为d1和d2
private static String byteToString(byte b) {
int n = b;
if (n<0)
n += 256;
int d1 = n/16;
int d2 = n%16;
return higDigits[d1]+higDigits[d2];
}
/**
* 返回大写MD5
*
* @param origin
* @param charsetname
* @return
*/
private static String MD5Encode(String origin,String charsetname) {
String resultString = null;
try {
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
if (charsetname == null && "".equals(charsetname)) {
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
}else {
resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
}
} catch (Exception e) {
e.printStackTrace();
}
return resultString.toUpperCase();
}
/**
*@param origin
*@return
* 方法
*/
public static String MD5EncodeUtf8(String origin) {
// origin = origin ;
return MD5Encode(origin, "UTF-8");
}
// 定义一个常量字符数组,用来存放每个16进制字符
private static final String higDigits[] = {"0","1","2","3","4","5","6","7","8","9"
, "a","b","c","d","e","f"};
/**
* @param input (参数)
* @author 杰
*/
public static String stringMD5(String input) {
try {
// 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)
MessageDigest md = MessageDigest.getInstance("MD5");
// 输入的字符串转换成字节数组
byte[] inputByteArray = input.getBytes();
// inputByteArray是输入字符串转换得到的字节数组
md.update(inputByteArray);
// 转换并返回结果,也是字节数组,包含16个元素
byte[] resultByteArray = md.digest();
// 字符数组转换成字符串返回
return byteArrayToHex(resultByteArray);
} catch (NoSuchAlgorithmException e) {
return null;
}
}
//下面这个函数用于将字节数组换成成16进制的字符串
private static String byteArrayToHex(byte[] byteArray) {
// 首先初始化一个字符数组,用来存放每个16进制字符
char[] hexDigits = {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F'};
// new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))
char[] resultCharArray = new char[byteArray.length*2];
// 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去
int index = 0;
for (byte b : byteArray) {
resultCharArray[index++] = hexDigits[b>>> 4 & 0xf];
resultCharArray[index++] = hexDigits[b& 0xf];
}
// 字符数组组合成字符串返回
return new String(resultCharArray);
}
// public static void main(String[] args) {
// MD5Util md = new MD5Util();
// String password = "123456";
// String encodePassword = md.getMD5String(password).toString() ;
// System.out.println(encodePassword);
// }
}
最后在main方法测试一下你的方法
在线JSON校验格式化工具地址:http://www.bejson.com