1. package com.jideos.jnotes.utils;
    2. import cn.hutool.core.codec.Base64;
    3. import org.springframework.stereotype.Component;
    4. import javax.crypto.Cipher;
    5. import java.security.KeyFactory;
    6. import java.security.PrivateKey;
    7. import java.security.PublicKey;
    8. import java.security.spec.PKCS8EncodedKeySpec;
    9. import java.security.spec.X509EncodedKeySpec;
    10. /**
    11. * 非对称加密公钥和私钥
    12. *
    13. * @author 杨胖胖
    14. */
    15. @Component
    16. public class RsaUtil {
    17. private final static String PRIVATE_KEY = "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAgPlRaU1JWFaWcadfAN/EnmvxTADfpszOj2J6xagn2uZSQ1VtuTaGPE2M8uqdcD+dyUZH0+M0kWWc2AzqtTLOPQIDAQABAkBFXtSNIQbcPuZ4hx+wZqto0oJc8PNa0jogIUYL3mBhelE1YsKxCvuNnJzYIJr/aa9tUX6Oi4s6sZM6IC4ALec5AiEAt8cLB7pcJVoc9Al+P8jADb4q1mtb8+Vin79ADLAExOMCIQCzqMBW5CE2MNct334IzNYuv7PATo6lu+GnntbyUsWqXwIgWYmWbCt13ZTr6lH9uqHaQFfYkyM3Z7rotB//2q6fhDUCIQCGIvFwLqXJUw/llR8BrQYhI0ouw7hnb26cetCbXkds2wIgRZuMzZRTAOOhiJsLWW0o6GEMljc0Dff69RFdA/XqBd4=";
    18. private final static String PUBLIC_KEY = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAID5UWlNSVhWlnGnXwDfxJ5r8UwA36bMzo9iesWoJ9rmUkNVbbk2hjxNjPLqnXA/nclGR9PjNJFlnNgM6rUyzj0CAwEAAQ==";
    19. private final static String ALGORITHM = "RSA";
    20. /**
    21. * 私钥加密
    22. *
    23. * @param data 待加密数据
    24. * @return byte[] 加密数据
    25. */
    26. public byte[] encryptByPrivateKey(byte[] data) throws Exception {
    27. //取得私钥
    28. PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(Base64.decode(PRIVATE_KEY));
    29. KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
    30. //生成私钥
    31. PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
    32. //数据加密
    33. Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
    34. cipher.init(Cipher.ENCRYPT_MODE, privateKey);
    35. return cipher.doFinal(data);
    36. }
    37. /**
    38. * 公钥加密
    39. *
    40. * @param data 待加密数据
    41. * @return byte[] 加密数据
    42. */
    43. public byte[] encryptByPublicKey(byte[] data) throws Exception {
    44. //实例化密钥工厂
    45. KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
    46. //初始化公钥
    47. //密钥材料转换
    48. X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(Base64.decode(PUBLIC_KEY));
    49. //产生公钥
    50. PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);
    51. //数据加密
    52. Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
    53. cipher.init(Cipher.ENCRYPT_MODE, pubKey);
    54. return cipher.doFinal(data);
    55. }
    56. /**
    57. * 私钥解密
    58. *
    59. * @param data 待解密数据
    60. * @return byte[] 解密数据
    61. */
    62. public byte[] decryptByPrivateKey(byte[] data) throws Exception {
    63. //取得私钥
    64. PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(Base64.decode(PRIVATE_KEY));
    65. KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
    66. //生成私钥
    67. PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
    68. //数据解密
    69. Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
    70. cipher.init(Cipher.DECRYPT_MODE, privateKey);
    71. return cipher.doFinal(data);
    72. }
    73. /**
    74. * 公钥解密
    75. *
    76. * @param data 待解密数据
    77. * @return byte[] 解密数据
    78. */
    79. public byte[] decryptByPublicKey(byte[] data) throws Exception {
    80. //实例化密钥工厂
    81. KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
    82. //初始化公钥
    83. //密钥材料转换
    84. X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(Base64.decode(PUBLIC_KEY));
    85. //产生公钥
    86. PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);
    87. //数据解密
    88. Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
    89. cipher.init(Cipher.DECRYPT_MODE, pubKey);
    90. return cipher.doFinal(data);
    91. }
    92. }