加解密
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);
import org.apache.commons.codec.digest.DigestUtils; //import 包名.类名;引入jar包,使用的是jmeter/lib目录下自带的MD5加密包commons-codec-1.11.jar String a1="{\"id\":\"UD227\",\"Type\":\"001\",\"age\":\"20\"}";//要进行加密的对象 String id=args[0];//引入变量mobile,前置处理器和后置处理器中使用args[] String type=args[1]; String age=${__Random(18,60,)}; //String id=bsh.args[0];//引入变量mobile,beanshell取样器中bsh.args[] String a=a1.replaceAll("UD227", id).replaceAll("20", age).replaceAll("001", type);//参数替换 String md5=DigestUtils.md5Hex(a);//类名.方法名,调用加密方法 log.info(md5); log.info(a); log.info(age+","+type); vars.put("md5",md5);//将变量md5的值赋值给jmeter的变量md5 String md5_upper=md5.toUpperCase();//将变量md5的值全部变成大写字母 log.info(md5_upper); String md5_lower=md5.toLowerCase();//将变量md5的值全部变成小写字母 log.info(md5_lower);
import org.apache.commons.codec.digest.DigestUtils; //import 包名.类名;引入jar包,使用的是jmeter/lib目录下自带的MD5加密包commons-codec-1.11.jar String mobile=args[0];//引入变量mobile,前置处理器和后置处理器中使用args[] String number=args[1]; String md5=DigestUtils.md5Hex(mobile+number);//类名.方法名,调用加密方法 log.info(md5); //vars.put("md5",md5);//将变量md5的值赋值给jmeter的变量md5