JdkSignatureUtil.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package com.huimv.management.rsa;
  2. import java.security.InvalidKeyException;
  3. import java.security.KeyFactory;
  4. import java.security.NoSuchAlgorithmException;
  5. import java.security.PrivateKey;
  6. import java.security.PublicKey;
  7. import java.security.Signature;
  8. import java.security.SignatureException;
  9. import java.security.spec.InvalidKeySpecException;
  10. import java.security.spec.PKCS8EncodedKeySpec;
  11. import java.security.spec.X509EncodedKeySpec;
  12. import java.util.Base64;
  13. /**
  14. * @description RSA签名工具类
  15. *
  16. * @author admin
  17. *
  18. */
  19. public class JdkSignatureUtil {
  20. private final static String RSA = "RSA";
  21. private final static String MD5_WITH_RSA = "MD5withRSA";
  22. /**
  23. * 执行签名
  24. *
  25. * @param rsaPrivateKey 私钥
  26. * @param toSignStr 参数内容
  27. * @return 签名后的内容,base64后的字符串
  28. * @throws NoSuchAlgorithmException
  29. * @throws InvalidKeySpecException
  30. * @throws InvalidKeyException
  31. * @throws SignatureException
  32. */
  33. public static String executeSignature(String rsaPrivateKey, String toSignStr) throws NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, SignatureException {
  34. // base64解码私钥
  35. byte[] decodePrivateKey = Base64.getDecoder().decode(rsaPrivateKey.replace("\r\n", ""));
  36. PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(decodePrivateKey);
  37. KeyFactory keyFactory = KeyFactory.getInstance(RSA);
  38. PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
  39. Signature signature = Signature.getInstance(MD5_WITH_RSA);
  40. signature.initSign(privateKey);
  41. signature.update(toSignStr.getBytes());
  42. // 生成签名
  43. byte[] result = signature.sign();
  44. // base64编码签名为字符串
  45. return Base64.getEncoder().encodeToString(result);
  46. }
  47. /**
  48. * 验证签名
  49. *
  50. * @param rsaPublicKey 公钥
  51. * @param sign 签名
  52. * @param src 参数内容
  53. * @return 验证结果
  54. * @throws NoSuchAlgorithmException
  55. * @throws InvalidKeySpecException
  56. * @throws InvalidKeyException
  57. * @throws SignatureException
  58. */
  59. public static boolean verifySignature(String rsaPublicKey, String sign, String src) throws NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, SignatureException {
  60. // base64解码公钥
  61. byte[] decodePublicKey = Base64.getDecoder().decode(rsaPublicKey.replace("\r\n", ""));
  62. X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(decodePublicKey);
  63. KeyFactory keyFactory = KeyFactory.getInstance(RSA);
  64. PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
  65. Signature signature = Signature.getInstance(MD5_WITH_RSA);
  66. signature.initVerify(publicKey);
  67. signature.update(src.getBytes());
  68. // base64解码签名为字节数组
  69. byte[] decodeSign = Base64.getDecoder().decode(sign);
  70. // 验证签名
  71. return signature.verify(decodeSign);
  72. }
  73. }