MD5加密Util
2024-10-12 23:25:46
(1)需要导入的包
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
(2)MD5Util类
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class MD5Util {
/**
* 字符串签名
* @param text 需要签名的字符串
* @param key 密钥
* @param charset 编码格式
* @return 签名结果
*/
public static String sign(String text, String key, String charset) {
//拼接key
text = text + key;
return DigestUtils.md5Hex(getContentBytes(text, charset));
}
/**
* 根据参数map签名
* @param map 有序map
* @param key
* @param charset
* @return
*/
public static String sign(TreeMap<String, Object> map, String key, String charset){
Set<String> keySet = map.keySet();
StringBuilder sb = new StringBuilder();
for (String mapKey : keySet){
String value = (String)map.get(key);
sb.append(key).append("=").append(value).append("&");
}
return sign(sb.toString(), key, charset);
}
/**
* 根据参数map签名
* @param map hashMap
* @param key
* @param charset
* @return
*/
public static String sign1(Map<String, Object> map, String key, String charset){
Set<String> keySet = map.keySet();
StringBuilder sb = new StringBuilder();
for (String mapKey : keySet){
String value = (String)map.get(key);
sb.append(key).append("=").append(value).append("&");
}
return sign(sb.toString(), key, charset);
}
/**
* 根据参数map签名
* @param map hashMap
* @param key
* @param charset
* @return
*/
public static String sign(Map<String, String> map, String key, String charset){
Set<String> keySet = map.keySet();
StringBuilder sb = new StringBuilder();
for (String mapKey : keySet){
String value = (String)map.get(key);
sb.append(key).append("=").append(value).append("&");
}
return sign(sb.toString(), key, charset);
}
/**
* 根据字符串获取byte[]
* @param content
* @param charset
* @return
*/
private static byte[] getContentBytes(String content, String charset){
if (StringUtils.isEmpty(charset)) {
return content.getBytes();
}
try {
return content.getBytes(charset);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("转码过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset);
}
}
/**
* 签名,不用加密码
* @param origin
* @param charsetname
* @return
*/
public 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 exception) {
}
return resultString;
}
private static String byteArrayToHexString(byte b[]) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++)
resultSb.append(byteToHexString(b[i]));
return resultSb.toString();
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n += 256;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
}
(3)使用举例
//加密
//要加密的数据map<String, String>
Map<String, String> data = new TreeMap<String, String>();
String key="key123";//加密key
String sign = MD5Util.sign(data, key, "utf-8");
//要加密的数据map<String, Object>
Map<String, Object> result = new TreeMap<String, Object>();
String key="key123";//加密key
String sign = MD5Util.sign1(data, key, "utf-8");
//不用密码的加密,加密一个String
String sign=MD5Util.MD5Encode(mchkey, "utf-8");
最新文章
- Oracle 字符串分割排序冒泡算法
- iOS 开发之重力动画效果
- ADO.NET笔记——执行事务
- [BC]BestCoder Round#86小结
- CF Codeforces Round #231 (Div. 2)
- Java基础知识强化82:Random类概述和方法使用
- OC——动态添加Button和监听UIAlertView按钮
- docker 数据管理3
- PHP中类的继承关系
- Front-End(五)——工具使用
- MySQL的JOIN(五):JOIN优化实践之排序
- Hadoop版本选择
- 《.NET 设计规范》第 3 章 命名规范
- Markdown——入门使用
- android startActivityForResult 使用实例
- mysql 开发进阶篇系列 32 工具篇(mysqladmin工具)
- 含有按钮的ScrollView在iOS8中无法滚动的解决办法 | ScrollView with UIControl/UIButton subviews not scrollable under iOS 8
- idea 改变version control
- hive 抽样方法
- 不清楚System.Diagnostics.Process.Start(e.LinkText); 的含义