N个utils(加密解密-算法初窥)

MD5+SHA1

public static String signature(String appKey,String appSecret,long clientTime,String version) throws Exception {
   String pathString = "appKey=" + appKey + "&clientTime=" + clientTime+ "&version=" + version + "&" + appSecret;
   String data = DigestUtils.md5Hex(pathString); // MD5加密

   MessageDigest digest = MessageDigest.getInstance("SHA-1");
   byte[] hash = digest.digest(data.getBytes());

   // 将字节数组转换成十六进制字符串
   StringBuilder hexString = new StringBuilder();
   for (byte b : hash) {
      String hex = Integer.toHexString(0xff & b);
      if (hex.length() == 1) hexString.append('0');
      hexString.append(hex);
   }

   return hexString.toString();
}

MD5+盐

String encrypt = GenerateUtil.randomCode(6);
String s = DigestUtils.md5Hex(DigestUtils.md5Hex("123456") + encrypt);

 MD5-or-HMACSHA256

public static String generateSignature(final Map<String, String> data, String key, SignType signType) throws Exception {
    Set<String> keySet = data.keySet();
    String[] keyArray = keySet.toArray(new String[keySet.size()]);
    Arrays.sort(keyArray);
    StringBuilder sb = new StringBuilder();
    for (String k : keyArray) {
        if (k.equals(WXPayConstants.FIELD_SIGN)) {
            continue;
        }
        if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名
            sb.append(k).append("=").append(data.get(k).trim()).append("&");
    }
    sb.append("key=").append(key);
    if (SignType.MD5.equals(signType)) {
        return MD5(sb.toString()).toUpperCase();
    }
    else if (SignType.HMACSHA256.equals(signType)) {
        return HMACSHA256(sb.toString(), key);
    }
    else {
        throw new Exception(String.format("Invalid sign_type: %s", signType));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值