7a354865ea1e6707e72affb9f33167357072ea27.svn-base 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package com.chinacreator.process.util;
  2. import org.apache.commons.codec.binary.Base64;
  3. import javax.crypto.Cipher;
  4. import java.nio.charset.Charset;
  5. import java.security.*;
  6. import java.security.spec.PKCS8EncodedKeySpec;
  7. import java.security.spec.X509EncodedKeySpec;
  8. /**
  9. * RSA工具类
  10. *
  11. * @author wjf
  12. * @version 2020-4-21
  13. */
  14. public class RsaUtils {
  15. /**
  16. * 使用公钥加密
  17. *
  18. * @param content
  19. * @param publicKey
  20. * @param charset
  21. * @return
  22. * @throws GeneralSecurityException
  23. */
  24. public static String encryptWithPublicKey(String content, String publicKey, Charset charset)
  25. throws GeneralSecurityException {
  26. Key key = getPublicKey(publicKey);
  27. return encryptWithKey(content, key, charset);
  28. }
  29. /**
  30. * 使用密钥加密
  31. *
  32. * @param content
  33. * @param key
  34. * @param charset
  35. * @return
  36. * @throws GeneralSecurityException
  37. */
  38. public static String encryptWithKey(String content, Key key, Charset charset)
  39. throws GeneralSecurityException {
  40. if (content == null) {
  41. return null;
  42. }
  43. // 对数据加密
  44. Cipher cipher = Cipher.getInstance("RSA");
  45. cipher.init(Cipher.ENCRYPT_MODE, key);
  46. if (charset == null) {
  47. cipher.update(content.getBytes());
  48. } else {
  49. cipher.update(content.getBytes(charset));
  50. }
  51. byte[] signed = cipher.doFinal();
  52. return Base64.encodeBase64String(signed);
  53. }
  54. /**
  55. * 使用私钥解密
  56. *
  57. * @param content
  58. * @param privateKey
  59. * @param charset
  60. * @return
  61. * @throws GeneralSecurityException
  62. */
  63. public static String decryptWithPrivateKey(String content, String privateKey, Charset charset)
  64. throws GeneralSecurityException {
  65. Key key = getPrivateKey(privateKey);
  66. return decryptWithKey(content, key, charset);
  67. }
  68. /**
  69. * 使用密钥解密
  70. *
  71. * @param content
  72. * @param key
  73. * @param charset
  74. * @return
  75. * @throws GeneralSecurityException
  76. */
  77. public static String decryptWithKey(String content, Key key, Charset charset)
  78. throws GeneralSecurityException {
  79. if (content == null) {
  80. return null;
  81. }
  82. try {
  83. String result = null;
  84. // 对数据解密
  85. Cipher cipher = Cipher.getInstance("RSA");
  86. cipher.init(Cipher.DECRYPT_MODE, key);
  87. byte[] data = Base64.decodeBase64(content);
  88. cipher.update(data);
  89. byte[] signed = cipher.doFinal();
  90. if (charset != null) {
  91. result = new String(signed, charset);
  92. } else {
  93. result = new String(signed);
  94. }
  95. return result;
  96. } catch (Exception e) {
  97. return null;
  98. }
  99. }
  100. /**
  101. * 获取公钥密钥
  102. * @param key
  103. * @return
  104. * @throws GeneralSecurityException
  105. */
  106. public static PublicKey getPublicKey(String key) throws GeneralSecurityException {
  107. if (key == null) {
  108. return null;
  109. }
  110. KeyFactory keyFactory = KeyFactory.getInstance("RSA");
  111. byte[] encodedKey = Base64.decodeBase64(key);
  112. return keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
  113. }
  114. /**
  115. * 获取私钥密钥
  116. * @param key
  117. * @return
  118. * @throws GeneralSecurityException
  119. */
  120. public static PrivateKey getPrivateKey(String key)
  121. throws GeneralSecurityException {
  122. if (key == null) {
  123. return null;
  124. }
  125. KeyFactory keyFactory = KeyFactory.getInstance("RSA");
  126. byte[] encodedKey = Base64.decodeBase64(key);
  127. return keyFactory.generatePrivate(new PKCS8EncodedKeySpec(encodedKey));
  128. }
  129. public static void main(String[] args) throws GeneralSecurityException {
  130. String publicKey= "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyw5ghlH6GCIkM9Lt7uGcI/QuebfXgNq3CsOL0/DrbayGp+W/9Fz78n2ho3rQUvX4hw6WXxTxFSgQdZVhY9E+WAfYiW0qi8N+vwgZZ1awHQqJV6U91CeReR8FHOS9BOMxjirjpsja2m0hrrSItAOAyC/bH+d28NLveewYiPDx3OK0KWByOGBjI2TQFOHxjgYzLkFgd7ZbKUxmJ1KVrb/1qr4NUmqJhNqoWeXfRkNfEL7hp41d9uM6MC7YobBG+0azcIKm4bCOD1KkY3GpsTANJCt0X7aH/2irTW658qbshiZm8QEkWHx3rZAl5t+FLxDYTdZhoq3JBD4M4g8nmlOM8wIDAQAB";
  131. String privateKey = "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";
  132. String enr = RsaUtils.encryptWithPublicKey("appKey=3000004628&callNumber=16602020321", publicKey, Charset.defaultCharset());
  133. System.out.println(enr);
  134. // // BASE64加密
  135. // byte[] data = Base64.encodeBase64(enr.getBytes());
  136. // System.out.println("BASE64加密:" + new String(data));
  137. //
  138. // // BASE64解密
  139. // byte[] bytes = Base64.decodeBase64(data);
  140. // System.out.println("BASE64解密:" + new String(bytes));
  141. String dec = RsaUtils.decryptWithPrivateKey(enr, privateKey, Charset.defaultCharset());
  142. System.out.println(dec);
  143. }
  144. }