目录
Sign签名生成方法工具类
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
/**
* 微信工具类
* @Author: LiuYong
* @Date:2019/12/11 11:06
* @Description: TODO 微信工具类
*/
public class WeChatTool {
private static Logger logger = Logger.getLogger(WeChatTool.class.getName());
/**签名类型*/
public static final String MD5="MD5";
public static final String HMACSHA256="HMACSHA256";
public static void main(String[] args) {
Map<String,Object> map = new HashMap<>();
map.put("appid","wxd930ea5d5a258f4f");
map.put("auth_code","123456");
map.put("body","test");
map.put("device_info","123");
map.put("mch_id","1900000109");
System.out.println(getSign(map,WeChatConstants.KEY,WeChatTool.HMACSHA256));
}
/**
* Sign签名生成方法
* @Author LiuYong
* @Date 2019/12/11 11:13
* @Description TODO Sign签名生成方法
* @param map 自定义参数
* @param key 商户KEY
* @param type 签名类型
* @return
**/
public static String getSign(Map<String,Object> map,String key,String type){
StringBuilder sb = new StringBuilder();
String result =null;
try{
ArrayList<String> list = new ArrayList<String>();
for(Map.Entry<String,Object> entry:map.entrySet()){
if(entry.getValue()!=""){
list.add(entry.getKey() + "=" + entry.getValue() + "&");
}
}
int size = list.size();
String [] arrayToSort = list.toArray(new String[size]);
Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER);
for(int i = 0; i < size; i ++) {
sb.append(arrayToSort[i]);
}
sb.append("key=" + key);
result = sb.toString();
if(type.equals(MD5)){
result=MD5(result);
}else if(type.equals(HMACSHA256)){
result=HMACSHA256(result,key);
}
}catch (Exception e){
logger.info("ERROR com.slf.utils.utils.wechat.WeChatTool.getSign :"+e.getMessage());
return null;
}
return result;
}
/**
* 生成 MD5
* @Author LiuYong
* @Date 2019/12/11 17:08
* @Description TODO 生成 MD5
* @param data 待处理数据
* @return 加密结果
**/
public static String MD5(String data) {
StringBuilder sb = new StringBuilder();
try{
java.security.MessageDigest md = MessageDigest.getInstance("MD5");
byte[] array = md.digest(data.getBytes("UTF-8"));
for (byte item : array) {
sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
}
}catch (Exception e){
logger.info("ERROR com.slf.utils.utils.wechat.WeChatTool.MD5 :"+e.getMessage());
return null;
}
return sb.toString().toUpperCase();
}
/**
* 生成 HMACSHA256
* @Author LiuYong
* @Date 2019/12/11 17:00
* @Description TODO 生成 HMACSHA256
* @param data 待处理数据
* @param key 密钥
* @return 加密结果
**/
public static String HMACSHA256(String data, String key) {
StringBuilder sb = new StringBuilder();
try{
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
for (byte item : array) {
sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
}
}catch (Exception e){
logger.info("ERROR com.slf.utils.utils.wechat.WeChatTool.HMACSHA256 :"+e.getMessage());
return null;
}
return sb.toString().toUpperCase();
}
}
工具类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.security.MessageDigest;
/**
* Md5加密方法
* @Author LiuYong
* @Date 2019/12/11 11:17
* @Description TODO Md5加密方法
**/
public class Md5Utils
{
private static final Logger log = LoggerFactory.getLogger(Md5Utils.class);
private static byte[] md5(String s)
{
MessageDigest algorithm;
try
{
algorithm = MessageDigest.getInstance("MD5");
algorithm.reset();
algorithm.update(s.getBytes("UTF-8"));
byte[] messageDigest = algorithm.digest();
return messageDigest;
}
catch (Exception e)
{
log.error("MD5 Error...", e);
}
return null;
}
private static final String toHex(byte hash[])
{
if (hash == null)
{
return null;
}
StringBuffer buf = new StringBuffer(hash.length * 2);
int i;
for (i = 0; i < hash.length; i++)
{
if ((hash[i] & 0xff) < 0x10)
{
buf.append("0");
}
buf.append(Long.toString(hash[i] & 0xff, 16));
}
return buf.toString();
}
public static String hash(String s)
{
try
{
return new String(toHex(md5(s)).getBytes("UTF-8"), "UTF-8");
}
catch (Exception e)
{
log.error("not supported charset...{}", e);
return s;
}
}
}
评论 (0)