1 public static void main(String[] args) {
2 SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();
3 //String mfrchant_id="fffff";
4 String merchant_id="190010002";
5 String business_type="1005";
6 String out_trade_no="1400000001";
7 String key="3A4BC4A4000CF1B5FFA9E351E6C1539E";
8 //parameters.put("mfrchant_id", mfrchant_id);
9 parameters.put("merchant_id", merchant_id);
10 parameters.put("business_type", business_type);
11 parameters.put("out_trade_no",out_trade_no);
12 String characterEncoding = "UTF-8"; //指定字符集UTF-8
13 String mySign = createSign(characterEncoding,parameters,key);
14 log.info(mySign);
15 //System.out.println("我 的签名是:"+mySign);
16 }
17
18 public static String createSign(String characterEncoding,SortedMap<Object,Object> parameters,String key){
19 StringBuffer sb = new StringBuffer();
20 StringBuffer sbkey = new StringBuffer();
21 Set es = parameters.entrySet(); //所有参与传参的参数按照accsii排序(升序)
22 Iterator it = es.iterator();
23 while(it.hasNext()) {
24 Map.Entry entry = (Map.Entry)it.next();
25 String k = (String)entry.getKey();
26 Object v = entry.getValue();
27 //空值不传递,不参与签名组串
28 if(null != v && !"".equals(v)) {
29 sb.append(k + "=" + v + "&");
30 sbkey.append(k + "=" + v + "&");
31 }
32 }
33 //System.out.println("字符串:"+sb.toString());
34 sbkey=sbkey.append("key="+key);
35 System.out.println("字符串:"+sbkey.toString());
36 //MD5加密,结果转换为大写字符
37 String sign = MD5Util.MD5Encode(sbkey.toString(), characterEncoding).toUpperCase();
38 System.out.println("MD5加密值:"+sign);
39 return sb.toString()+"sign="+sign;
40 return sbkey;
41 }
//签名生成的通用步骤如下:
//第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
//特别注意以下重要规则:
//1.◆ 参数名ASCII码从小到大排序(字典序);
//2.◆ 如果参数的值为空不参与签名;
//3.◆ 参数名区分大小写;
//4.◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
//5.◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段
//第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
import org.apache.commons.codec.digest.DigestUtils;
StringBuffer sb = new StringBuffer();
StringBuffer sbkey = new StringBuffer();
SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();
String merchant_id="190010002";
String business_type="1005";
String out_trade_no="1400000001";
String key="3A4BC4A4000CF1B5FFA9E351E6C1539E";
parameters.put("merchant_id", merchant_id);
parameters.put("business_type", business_type);
parameters.put("out_trade_no",out_trade_no);
String characterEncoding = "UTF-8";
Set es = parameters.entrySet(); //所有参与传参的参数按照accsii排序(升序)
Iterator it = es.iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
String k = (String)entry.getKey();
Object v = entry.getValue();
//空值不传递,不参与签名组串
if(null != v && !"".equals(v)) {
sb.append(k + "=" + v + "&");
sbkey.append(k + "=" + v + "&");
}
}
//System.out.println("字符串:"+sb.toString());
sbkey=sbkey.append("key="+key);
System.out.println("字符串:"+sbkey.toString());
//MD5加密,结果转换为大写字符
String sign = DigestUtils.md5Hex(sbkey.toString()).toUpperCase();
log.info(sign);
//String requestbody=sb.toString()+"sign="+sign;
//log.info(requestbody);
1 //HMAC_SHA加密方法
2 //package com.taikang.hcloud.tlife.activity.cms.util;
3 //
4 //import javax.crypto.Mac;
5 //import javax.crypto.spec.SecretKeySpec;
6 //
7 //
8 //public class SignUtil {
9 //
10 // private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
11 //
12 //
13 // private static String byteToHexString(byte b) {
14 // int ret = b;
15 // if (ret < 0) {
16 // ret += 256;
17 // }
18 // int m = ret / 16;
19 // int n = ret % 16;
20 // return HEX_DIGITS[m] + "" + HEX_DIGITS[n] + "";
21 // }
22 //
23 // private static String byteArrayToHexString(byte[] bytes) {
24 // StringBuilder stringBuilder = new StringBuilder();
25 // for (int i = 0; i < bytes.length; i++) {
26 // stringBuilder.append(byteToHexString(bytes[i]));
27 // }
28 // return stringBuilder.toString();
29 // }
30 //
31 // public static String hMacSha1(String message, String secret) {
32 // String hash = "";
33 // try {
34 // Mac mac = Mac.getInstance("HmacSHA1");
35 // SecretKeySpec secretKeySpec = new SecretKeySpec(secret.getBytes(), "HmacSHA1");
36 // mac.init(secretKeySpec);
37 // byte[] bytes = mac.doFinal(message.getBytes());
38 // hash = byteArrayToHexString(bytes);
39 // } catch (Exception e) {
40 // e.printStackTrace();
41 // }
42 // return hash;
43 // }
44 //}
45
46 import HMAC_SHA_1.SignUtil;
47
48 String noncestr ="qwer";
49 String timestamp="20110210";
50 String distance="0";
51 //String content3 = noncestr+timestamp +distance;
52 String content4 = "noncestr="+noncestr+"×tamp="+timestamp +"&distance="+distance;//将入参进行拼接然后加密
53 String signature = SignUtil.hMacSha1(content4, noncestr);
54 //System.out.println(signature);
55 log.info(signature);
56 //vars.put("sign",signature);
1 import org.apache.commons.codec.digest.DigestUtils;//import 包名.类名;引入jar包,使用的是jmeter/lib目录下自带的SHA-256加密包commons-codec-1.11.jar
2
3 String a="{"id":"UD227","Type":"001","age":"20"}";//要进行加密的对象
4 String a_SHE256=DigestUtils.sha256Hex(a.getBytes());
5 //System.out.println(a_SHE256);
6 log.info(a_SHE256);
1 import org.apache.commons.codec.binary.Base64;//引入jmeter/lib目录下的commons-codec-1.11.jar
2 String a="123456刚刚";
3 byte[] a1=a.getBytes();//将字符串格式转换成数组格式
4 String a_base64=Base64.encodeBase64String(a1); //base64加密
5 //String a_base64=Base64.encodeBase64String(a.getBytes());
6 //tem.out.println(a_base64);
7 log.info(a_base64);
8
9 byte[] a3=Base64.decodeBase64(a_base64);//base64解密
10 String a4=new String(a3);//将数组格式转换成字符串
11 //System.out.println(a4);
12 log.info(a4);