java md5 加密工具类_Java实现MD5的加密工具类

一 点睛

MD5加密算法虽然已经过时,但在一些安全性不太高的行业仍然广受欢迎,在此提供一个MD5加密工具类。

二 代码

package com.imooc.demo.common.util;

import org.apache.commons.lang3.StringUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.io.IOException;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import java.util.Map;

/**

* @className: Md5

* @description: MD5加密算法

* @date: 2020/8/20

* @author: cakin

*/

public class Md5 {

private static Logger log = LoggerFactory.getLogger(Md5.class);

private static final String SIGN_TYPE = "MD5";

private static final String CHARSET_NAME = "UTF-8";

private static final String salt = "3zsAa6W9gfSMMhPSlQTdWFUSHY3LS8Vb";

/**

* MD5加密

*

* @param data 加密前的数据,以数组形式存在

* @return String 加密后的数据

*/

public static String encrypt(byte[] data) {

try {

MessageDigest md5 = MessageDigest.getInstance(SIGN_TYPE);

md5.update(data);

return byte2hex(md5.digest());

} catch (NoSuchAlgorithmException e) {

log.debug("md5 加密异常", e);

}

return "";

}

/**

* MD5加密

*

* @param str 加密前数据,以字符串形式存在

* @return String 加密后数据

*/

public static String encrypt(String str) {

try {

MessageDigest md5 = MessageDigest.getInstance(SIGN_TYPE);

md5.update((str + salt).getBytes(CHARSET_NAME));

return byte2hex(md5.digest());

} catch (Exception e) {

log.debug("md5 加密异常", e);

}

return null;

}

/**

* MD5加盐加密

*

* @param str 加密前数据

* @param salt 盐值

* @return String 加密后的数据

*/

public static String encrypt(String str, String salt) {

try {

MessageDigest md5 = MessageDigest.getInstance(SIGN_TYPE);

md5.update((str + salt).getBytes(CHARSET_NAME));

return byte2hex(md5.digest());

} catch (Exception e) {

if (log.isDebugEnabled()) {

log.debug("md5 加密异常", e);

}

}

return "";

}

/**

* 功能描述:MD5加盐加密

*

* @param str 加密前数据

* @param salt 盐值

* @param charset 字符编码

* @return String 加密后的字符串

* @author cakin

* @date 2020/8/20

*/

public static String encrypt(String str, String salt, String charset) {

try {

MessageDigest md5 = MessageDigest.getInstance(SIGN_TYPE);

md5.update((str + salt).getBytes(charset));

return byte2hex(md5.digest());

} catch (Exception e) {

if (log.isDebugEnabled()) {

log.debug("md5 加密异常", e);

}

}

return "";

}

/**

* 功能描述:转16进制

*

* @author cakin

* @date 2020/8/20

* @param bytes 字节数组

* @return String 转为16进账

*/

public static String byte2hex(byte[] bytes) {

StringBuilder sign = new StringBuilder();

for (int i = 0; i < bytes.length; i++) {

String hex = Integer.toHexString(bytes[i] & 0xFF);

if (hex.length() == 1) {

sign.append("0");

}

sign.append(hex.toUpperCase());

}

return sign.toString();

}

/**

* 功能描述:转字节数组

*

* @author cakin

* @date 2020/8/20

* @param str 16进制

* @return byte[] 字节数组

*/

public static byte[] hex2byte(String str) {

if (str == null) {

return null;

}

str = str.trim();

int len = str.length();

if (len <= 0 || len % 2 == 1) {

return null;

}

byte[] b = new byte[len / 2];

try {

for (int i = 0; i < str.length(); i += 2) {

b[(i / 2)] = (byte) Integer.decode("0x" + str.substring(i, i + 2)).intValue();

}

return b;

} catch (Exception e) {

}

return null;

}

/**

* 给Map请求做MD5签名

*

* @param sortedParams Map请求参数

* @param secret 签名密钥

* @return 签名

* @throws IOException

*/

public static String signRequestNew(Map sortedParams, String secret) throws IOException {

// 第一步:把字典按Key的字母顺序排序

List keys = new ArrayList(sortedParams.keySet());

Collections.sort(keys);

// 第二步:把所有参数名和参数值串在一起

StringBuilder query = new StringBuilder();

for (int i = 0; i < keys.size(); i++) {

String key = keys.get(i);

String value = sortedParams.get(key);

if (!StringUtils.isEmpty(key) && !StringUtils.isEmpty(value) && !"sign".equals(key)) {

query.append(key).append("=").append(value);

}

}

log.info("获取当APP请求参数,签名前值为:" + query.toString());

return Md5.encrypt(query.toString(), secret);

}

public static void main(String[] args) {

System.out.println(encrypt("798103174@qq.com", ""));

}

}

三 测试结果

1CDC486ECB2A7A1BEF7E78254C8DA6CE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值