HuifuUtils.java 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.szwl.util;
  2. import cn.hutool.core.util.RandomUtil;
  3. import com.huifu.bspay.sdk.opps.core.utils.DateTools;
  4. import com.huifu.bspay.sdk.opps.core.utils.RandomTools;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.apache.commons.lang3.StringUtils;
  7. import java.security.KeyFactory;
  8. import java.security.PrivateKey;
  9. import java.security.PublicKey;
  10. import java.security.Signature;
  11. import java.security.spec.PKCS8EncodedKeySpec;
  12. import java.security.spec.X509EncodedKeySpec;
  13. import java.util.Base64;
  14. @Slf4j
  15. public class HuifuUtils {
  16. /**
  17. * RSA私钥签名:签名方式SHA256WithRSA
  18. * @param data 待签名字符串
  19. * @param privateKeyBase64 私钥(Base64编码)
  20. * @return 签名byte[]
  21. * @throws Exception
  22. */
  23. public static String sign(String data, String privateKeyBase64) {
  24. // Base64 --> Key
  25. try {
  26. byte[] bytes = Base64.getDecoder().decode(privateKeyBase64);
  27. PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes);
  28. KeyFactory keyFactory;
  29. keyFactory = KeyFactory.getInstance("RSA");
  30. PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
  31. // Sign
  32. Signature signature = Signature.getInstance("SHA256WithRSA");
  33. signature.initSign(privateKey);
  34. signature.update(data.getBytes("UTF-8"));
  35. return Base64.getEncoder().encodeToString(signature.sign());
  36. } catch (Exception e) {
  37. return null;
  38. }
  39. }
  40. /**
  41. * 使用汇付RSA公钥验签
  42. * @param data 待签名字符串
  43. * @param publicKeyBase64 公钥(Base64编码)
  44. * @return 验签结果
  45. * @throws Exception
  46. */
  47. public static boolean verify(String data, String publicKeyBase64, String sign) {
  48. // Base64 --> Key
  49. try {
  50. byte[] bytes = Base64.getDecoder().decode(publicKeyBase64);
  51. X509EncodedKeySpec keySpec = new X509EncodedKeySpec(bytes);
  52. KeyFactory keyFactory;
  53. keyFactory = KeyFactory.getInstance("RSA");
  54. PublicKey publicKey = keyFactory.generatePublic(keySpec);
  55. // verify
  56. Signature signature = Signature.getInstance("SHA256WithRSA");
  57. signature.initVerify(publicKey);
  58. signature.update(data.getBytes("UTF-8"));
  59. return signature.verify(Base64.getDecoder().decode(sign));
  60. } catch (Exception e) {
  61. log.error("Exception", e);
  62. return false;
  63. }
  64. }
  65. /**
  66. * 生成随机流水号
  67. * @return
  68. */
  69. public static String initReqSeqId() {
  70. String numbers = RandomUtil.randomNumbers(10);
  71. return new StringBuilder(DateTools.getCurrentDateTimeYYYYMMDDHHMMSSSSS()).append(numbers).toString();
  72. }
  73. }