概述
1 packagecn.com.gome.utils;2
3 importjava.io.IOException;4 importjava.security.GeneralSecurityException;5 importjava.security.MessageDigest;6 importjava.security.NoSuchAlgorithmException;7 importjava.util.Arrays;8 importjava.util.Map;9
10 importjavax.crypto.Mac;11 importjavax.crypto.SecretKey;12 importjavax.crypto.spec.SecretKeySpec;13
14 importcn.com.gome.utils.StringUtils;15
16 /**
17 * 签名工具18 *@author
19 *20 */
21 public classSignUtil {22 /**
23 * 签名算法24 *25 *@paramparams26 *@paramsecret27 *@paramsignMethod28 *@return
29 *@throwsIOException30 */
31 public static String signTopRequest(Mapparams, String secret, String signMethod)32 throwsIOException {33 //第一步:检查参数是否已经排序
34 String[] keys = params.keySet().toArray(new String[0]);35 Arrays.sort(keys);36
37 //第二步:把所有参数名和参数值串在一起
38 StringBuilder query = newStringBuilder();39 if(Constants.CHARSET_UTF8.equals(signMethod)) {40 query.append(secret);41 }42 for(String key : keys) {43 String value =params.get(key);44 if(StringUtils.areNotEmpty(key, value)) {45 query.append(key).append(value);46 }47 }48
49 //第三步:使用MD5/HMAC加密
50 byte[] bytes = new byte[0];51 if(Constants.CHARSET_UTF8.equals(signMethod)) {52 bytes =encryptHMAC(query.toString(), secret);53 } else{54 query.append(secret);55 try{56 bytes =encryptMD5(query.toString());57 } catch(NoSuchAlgorithmException e) {58 //TODO Auto-generated catch block
59 e.printStackTrace();60 }61 }62
63 //第四步:把二进制转化为大写的十六进制
64 returnbyte2hex(bytes);65 }66
67 /**
68 * hmac加密69 *@paramdata70 *@paramsecret71 *@return
72 *@throwsIOException73 */
74 public static byte[] encryptHMAC(String data, String secret) throwsIOException {75 byte[] bytes = null;76 try{77 SecretKey secretKey = new SecretKeySpec(secret.getBytes(Constants.CHARSET_UTF8), "HmacMD5");78 Mac mac =Mac.getInstance(secretKey.getAlgorithm());79 mac.init(secretKey);80 bytes =mac.doFinal(data.getBytes(Constants.CHARSET_UTF8));81 } catch(GeneralSecurityException gse) {82 throw newIOException(gse.toString());83 }84 returnbytes;85 }86
87 /**
88 * 实现md5加密89 *@paramdata90 *@return
91 *@throwsIOException92 *@throwsNoSuchAlgorithmException93 */
94 public static byte[] encryptMD5(String data) throwsIOException, NoSuchAlgorithmException {95
96 //确定计算方法
97 MessageDigest md5 = MessageDigest.getInstance("MD5");98 returnmd5.digest(data.getBytes(Constants.CHARSET_UTF8));99 }100
101 /**
102 * 将字节数据进行16位处理103 *@parambytes104 *@return
105 */
106 public static String byte2hex(byte[] bytes) {107 StringBuilder sign = newStringBuilder();108 for (int i = 0; i < bytes.length; i++) {109 String hex = Integer.toHexString(bytes[i] & 0xFF);110 if (hex.length() == 1) {111 sign.append("0");112 }113 sign.append(hex.toUpperCase());114 }115 returnsign.toString();116 }117 }
最后
以上就是善良银耳汤为你收集整理的go java .net_sign签名算法一致算法-.net、java、golang的全部内容,希望文章能够帮你解决go java .net_sign签名算法一致算法-.net、java、golang所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复