java 验签


  public ResponseEntity<JSONObject> validation(JSONObject body, HttpServletRequest request) {
    // 获取第三方MD5加密串
    String sign = CommonUtils.getString(request.getHeader("sign"));
    // 第三方标识
    Long id = CommonUtils.getLong(request.getHeader("key"));
    // 时间戳
    Long dateTime = body.getLong("dateTime");
    // 当前时间 - 传入时间 大于或者小于 TIMES 则认为超出有效时间
    Long thisTime = System.currentTimeMillis() - dateTime;
    if (thisTime > TIMES || thisTime < 1) {
      return ResponseUtils.ok("验签错误");
    }
    Company company = companyMapper.selectById(id);
    if (CommonUtils.isEmpty(company) && CommonUtils.isEmpty(company.getEncrypted())) {

      return ResponseUtils.ok("验签错误");
    }
    // 第三方密钥
    body.put("key", company.getEncrypted());
    // json排序
    body = CommonUtils.jsonSort(body);
    // 转小写
    String str = JSON.toJSONString(body).toLowerCase();
    // 加密验证
    String md5 = DigestUtils.md5DigestAsHex(str.getBytes());
    if (!md5.equals(sign)) {
      return ResponseUtils.ok("验签错误");
    }

    return ResponseUtils.ok("验签通过");
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是C#加JavaSM2的示例代码: C#加示例代码: ```csharp using System; using System.Security.Cryptography; using System.Text; namespace SM2Demo { class Program { static void Main(string[] args) { // 待名的数据 string data = "Hello World!"; // 加载SM2证书 CngKey key = CngKey.Open("SM2Test"); // 创建SM2名对象 ECDsaCng sm2 = new ECDsaCng(key); // 计算名 byte[] signature = sm2.SignData(Encoding.UTF8.GetBytes(data)); // 输出名结果 Console.WriteLine("Signature: " + Convert.ToBase64String(signature)); } } } ``` Java示例代码: ```java import java.security.*; import java.security.spec.ECGenParameterSpec; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; public class SM2Demo { public static void main(String[] args) throws Exception { // 待的数据 String data = "Hello World!"; // 加载SM2证书 KeyFactory keyFactory = KeyFactory.getInstance("EC"); byte[] privateKeyBytes = Base64.getDecoder().decode("MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgJzvJZJZJ5zJzJZJ5\n" + "zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ\n" + "5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ\n" + "5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJw=="); PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes); PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec); byte[] publicKeyBytes = Base64.getDecoder().decode("MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DfQADZGk+JzJZJ5zJzJZJ5zJzJZJ5zJzJ\n" + "ZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJ\n" + "ZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJ\n" + "ZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJw=="); X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes); PublicKey publicKey = keyFactory.generatePublic(publicKeySpec); // 创建SM2对象 Signature signature = Signature.getInstance("SM3withSM2"); signature.initVerify(publicKey); // 名 byte[] signatureBytes = Base64.getDecoder().decode("MEUCIQDQJzvJZJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJgIgQJzvJZJZJ5zJz\n" + "JZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJz\n" + "JZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJzJZJ5zJw=="); signature.update(data.getBytes()); boolean result = signature.verify(signatureBytes); // 输出结果 System.out.println("Verify result: " + result); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值