HuifuUtils.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package com.szwl.util;
  2. import cn.hutool.core.util.RandomUtil;
  3. import com.huifu.bspay.sdk.opps.core.utils.DateTools;
  4. import lombok.extern.slf4j.Slf4j;
  5. import java.io.File;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.security.KeyFactory;
  9. import java.security.PrivateKey;
  10. import java.security.PublicKey;
  11. import java.security.Signature;
  12. import java.security.spec.PKCS8EncodedKeySpec;
  13. import java.security.spec.X509EncodedKeySpec;
  14. import java.util.Base64;
  15. @Slf4j
  16. public class HuifuUtils {
  17. /**
  18. * RSA私钥签名:签名方式SHA256WithRSA
  19. * @param data 待签名字符串
  20. * @param privateKeyBase64 私钥(Base64编码)
  21. * @return 签名byte[]
  22. * @throws Exception
  23. */
  24. public static String sign(String data, String privateKeyBase64) {
  25. // Base64 --> Key
  26. try {
  27. byte[] bytes = Base64.getDecoder().decode(privateKeyBase64);
  28. PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes);
  29. KeyFactory keyFactory;
  30. keyFactory = KeyFactory.getInstance("RSA");
  31. PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
  32. // Sign
  33. Signature signature = Signature.getInstance("SHA256WithRSA");
  34. signature.initSign(privateKey);
  35. signature.update(data.getBytes("UTF-8"));
  36. return Base64.getEncoder().encodeToString(signature.sign());
  37. } catch (Exception e) {
  38. return null;
  39. }
  40. }
  41. /**
  42. * 使用汇付RSA公钥验签
  43. * @param data 待签名字符串
  44. * @param publicKeyBase64 公钥(Base64编码)
  45. * @return 验签结果
  46. * @throws Exception
  47. */
  48. public static boolean verify(String data, String publicKeyBase64, String sign) {
  49. // Base64 --> Key
  50. try {
  51. byte[] bytes = Base64.getDecoder().decode(publicKeyBase64);
  52. X509EncodedKeySpec keySpec = new X509EncodedKeySpec(bytes);
  53. KeyFactory keyFactory;
  54. keyFactory = KeyFactory.getInstance("RSA");
  55. PublicKey publicKey = keyFactory.generatePublic(keySpec);
  56. // verify
  57. Signature signature = Signature.getInstance("SHA256WithRSA");
  58. signature.initVerify(publicKey);
  59. signature.update(data.getBytes("UTF-8"));
  60. return signature.verify(Base64.getDecoder().decode(sign));
  61. } catch (Exception e) {
  62. log.error("Exception", e);
  63. return false;
  64. }
  65. }
  66. /**
  67. * 生成随机流水号
  68. * @return
  69. */
  70. public static String initReqSeqId() {
  71. String numbers = RandomUtil.randomNumbers(10);
  72. return new StringBuilder(DateTools.getCurrentDateTimeYYYYMMDDHHMMSSSSS()).append(numbers).toString();
  73. }
  74. /**
  75. * 转base64为图片
  76. * @param base64Str
  77. * @return
  78. * @throws IOException
  79. */
  80. public static File base64ToTempImage(String base64Str) throws IOException {
  81. // 解码base64字符串
  82. byte[] imageBytes = Base64.getDecoder().decode(base64Str.split(",")[1]);
  83. // 创建一个临时文件
  84. File tempFile = File.createTempFile("temp_image", ".jpg");
  85. // 将解码后的数据写入临时文件
  86. try (FileOutputStream fos = new FileOutputStream(tempFile)) {
  87. fos.write(imageBytes);
  88. }
  89. // 返回临时文件
  90. return tempFile;
  91. }
  92. }