RsaUtil.java 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package com.malk.lianan;
  2. import cn.hutool.core.codec.Base64;
  3. import org.bouncycastle.jce.provider.BouncyCastleProvider;
  4. import java.security.KeyFactory;
  5. import java.security.PrivateKey;
  6. import java.security.Signature;
  7. import java.security.spec.PKCS8EncodedKeySpec;
  8. public class RsaUtil {
  9. private final static String KEY_RSA = "RSA";
  10. private final static String KEY_RSA_SIGNATURE = "SHA256WithRSA";
  11. private static BouncyCastleProvider bouncyCastleProvider = new BouncyCastleProvider();
  12. public static String sign(byte[] data, String privateKey) {
  13. String str = "";
  14. try {
  15. // 解密由 base64 编码的私钥
  16. byte[] bytes = decryptBase64(privateKey);
  17. // 构造 PKCS8EncodedKeySpec 对象
  18. PKCS8EncodedKeySpec pkcs = new PKCS8EncodedKeySpec(bytes);
  19. // 指定的加密算法
  20. KeyFactory factory = KeyFactory.getInstance(KEY_RSA,bouncyCastleProvider);
  21. // 取私钥对象
  22. PrivateKey key = factory.generatePrivate(pkcs);
  23. // 用私钥对信息生成数字签名
  24. Signature signature =Signature.getInstance(KEY_RSA_SIGNATURE,bouncyCastleProvider);
  25. signature.initSign(key);
  26. signature.update(data);
  27. str = encryptBase64(signature.sign());
  28. } catch (Exception e) {
  29. e.printStackTrace();
  30. }
  31. return str;
  32. }
  33. public static byte[] decryptBase64(String key) throws Exception {
  34. return Base64.decode(key);
  35. }
  36. public static String encryptBase64(byte[] key) throws Exception {
  37. return new String(Base64.encode(key));
  38. }
  39. }