我是靠谱客的博主 善良银耳汤,最近开发中收集的这篇文章主要介绍go java .net_sign签名算法一致算法-.net、java、golang,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部