RSA.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. package com.caimei.utils.payUtil;
  2. import org.apache.commons.lang3.ArrayUtils;
  3. import sun.misc.BASE64Encoder;
  4. import javax.crypto.BadPaddingException;
  5. import javax.crypto.Cipher;
  6. import javax.crypto.IllegalBlockSizeException;
  7. import javax.crypto.NoSuchPaddingException;
  8. import java.io.FileInputStream;
  9. import java.io.IOException;
  10. import java.io.UnsupportedEncodingException;
  11. import java.security.*;
  12. import java.security.cert.Certificate;
  13. import java.security.cert.CertificateFactory;
  14. import java.security.spec.InvalidKeySpecException;
  15. import java.security.spec.PKCS8EncodedKeySpec;
  16. import java.security.spec.X509EncodedKeySpec;
  17. import java.util.Arrays;
  18. import java.util.Enumeration;
  19. /**
  20. * 私钥签名,私钥签名(只有私钥能签),公钥验证签名,确认发起人是私钥持有人
  21. * 公钥加密,公钥加密只有私钥能解密
  22. * @author datou
  23. *
  24. */
  25. public class RSA {
  26. /**
  27. * String to hold name of the encryption padding.
  28. */
  29. public static final String NOPADDING = "RSA/NONE/NoPadding";
  30. public static final String RSANONEPKCS1PADDING = "RSA/NONE/PKCS1Padding";
  31. public static final String RSAECBPKCS1PADDING = "RSA/ECB/PKCS1Padding";
  32. public static final String PROVIDER = "BC";
  33. static{
  34. Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
  35. }
  36. /**
  37. * 验证签名
  38. *
  39. * @param data
  40. * 数据
  41. * @param sign
  42. * 签名
  43. * @param pubicKey
  44. * 公钥
  45. * @return
  46. */
  47. public static boolean verifySign(byte[] data, byte[] sign,
  48. PublicKey publicKey) {
  49. try {
  50. Signature signature = Signature
  51. .getInstance("MD5withRSA");
  52. signature.initVerify(publicKey);
  53. signature.update(data);
  54. boolean result = signature.verify(sign);
  55. return result;
  56. } catch (Exception e) {
  57. throw new RuntimeException("verifySign fail!", e);
  58. }
  59. }
  60. /**
  61. * 验证签名
  62. *
  63. * @param data
  64. * 数据
  65. * @param sign
  66. * 签名
  67. * @param pubicKey
  68. * 公钥
  69. * @return
  70. */
  71. public static boolean verifySign(String data, String sign,
  72. PublicKey pubicKey) {
  73. try {
  74. byte[] dataByte = data
  75. .getBytes("UTF-8");
  76. byte[] signByte = Base64.decode(sign
  77. .getBytes("UTF-8"));
  78. return verifySign(dataByte, signByte, pubicKey);
  79. } catch (UnsupportedEncodingException e) {
  80. throw new RuntimeException("verifySign fail! data["+data+"] sign["+sign+"]", e);
  81. }
  82. }
  83. /**
  84. * 签名
  85. *
  86. * @param data
  87. * @param key
  88. * @return
  89. */
  90. public static byte[] sign(byte[] data, PrivateKey key) {
  91. try {
  92. Signature signature = Signature
  93. .getInstance("MD5withRSA");
  94. signature.initSign(key);
  95. signature.update(data);
  96. return signature.sign();
  97. } catch (Exception e) {
  98. throw new RuntimeException("sign fail!", e);
  99. }
  100. }
  101. /**
  102. * 签名
  103. *
  104. * @param data
  105. * @param key
  106. * @return
  107. */
  108. public static String sign(String data, PrivateKey key) {
  109. System.out.println("原文:" + data);
  110. try {
  111. byte[] dataByte = data.getBytes("UTF-8");
  112. return new String(Base64.encode(sign(dataByte, key)));
  113. } catch (UnsupportedEncodingException e) {
  114. throw new RuntimeException("sign fail!", e);
  115. }
  116. }
  117. /**
  118. * 加密
  119. *
  120. * @param data
  121. * @param key
  122. * @return
  123. */
  124. public static byte[] encrypt(byte[] data, Key key,String padding) {
  125. try {
  126. final Cipher cipher = Cipher.getInstance(padding, PROVIDER);
  127. cipher.init(Cipher.ENCRYPT_MODE, key);
  128. return cipher.doFinal(data);
  129. } catch (Exception e) {
  130. throw new RuntimeException("encrypt fail!", e);
  131. }
  132. }
  133. /**
  134. * 加密
  135. *
  136. * @param data
  137. * @param key
  138. * @return
  139. */
  140. public static String encryptToBase64(String data, Key key,String padding) {
  141. try {
  142. return new String(Base64.encode(encrypt(
  143. data.getBytes("UTF-8"),
  144. key,padding)));
  145. } catch (Exception e) {
  146. throw new RuntimeException("encrypt fail!", e);
  147. }
  148. }
  149. /**
  150. * 解密
  151. *
  152. * @param data
  153. * @param key
  154. * @return
  155. */
  156. public static byte[] decrypt(byte[] data, Key key,String padding) {
  157. try {
  158. final Cipher cipher = Cipher.getInstance(padding, PROVIDER);
  159. cipher.init(Cipher.DECRYPT_MODE, key);
  160. return cipher.doFinal(data);
  161. } catch (Exception e) {
  162. throw new RuntimeException("encrypt fail!", e);
  163. }
  164. }
  165. /**
  166. * 解密
  167. *
  168. * @param data
  169. * @param key
  170. * @return
  171. */
  172. public static String decryptFromBase64(String data, Key key,String padding) {
  173. try {
  174. return new String(decrypt(Base64.decode(data.getBytes()), key,padding),
  175. "UTF-8");
  176. } catch (Exception e) {
  177. throw new RuntimeException("encrypt fail!", e);
  178. }
  179. }
  180. public static void createKeyPairs(int size) throws Exception {
  181. // create the keys
  182. KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", PROVIDER);
  183. generator.initialize(size, new SecureRandom());
  184. KeyPair pair = generator.generateKeyPair();
  185. PublicKey pubKey = pair.getPublic();
  186. PrivateKey privKey = pair.getPrivate();
  187. byte[] pk = pubKey.getEncoded();
  188. byte[] privk = privKey.getEncoded();
  189. String strpk = new String(Base64.encodeBase64(pk));
  190. String strprivk = new String(Base64.encodeBase64(privk));
  191. System.out.println("公钥:" + Arrays.toString(pk));
  192. System.out.println("私钥:" + Arrays.toString(privk));
  193. System.out.println("公钥Base64编码:" + strpk);
  194. System.out.println("私钥Base64编码:" + strprivk);
  195. }
  196. public static PublicKey getPublicKey(String base64EncodePublicKey) throws Exception{
  197. KeyFactory keyf = KeyFactory.getInstance("RSA", PROVIDER);
  198. X509EncodedKeySpec pubX509 = new X509EncodedKeySpec(Base64.decodeBase64(base64EncodePublicKey.getBytes()));
  199. PublicKey pubkey = keyf.generatePublic(pubX509);
  200. return pubkey;
  201. }
  202. public static PrivateKey getPrivateKey(String base64EncodePrivateKey)throws Exception{
  203. KeyFactory keyf = KeyFactory.getInstance("RSA", PROVIDER);
  204. PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decodeBase64(base64EncodePrivateKey.getBytes()));
  205. PrivateKey privkey = keyf.generatePrivate(priPKCS8);
  206. return privkey;
  207. }
  208. public static byte[] encode(String encodeString, Key key,String padding) throws Exception {
  209. final Cipher cipher = Cipher.getInstance(padding, PROVIDER);
  210. cipher.init(Cipher.ENCRYPT_MODE, key);
  211. byte[] bytes = encodeString.getBytes("UTF-8");
  212. byte[] encodedByteArray = new byte[] {};
  213. for (int i = 0; i < bytes.length; i += 117) {
  214. byte[] subarray = ArrayUtils.subarray(bytes, i, i + 117);
  215. byte[] doFinal = cipher.doFinal(subarray);
  216. encodedByteArray = ArrayUtils.addAll(encodedByteArray, doFinal);
  217. }
  218. return encodedByteArray;
  219. }
  220. /**
  221. * 加密
  222. *
  223. * @param data
  224. * @param key
  225. * @return
  226. */
  227. public static String encodeToBase64(String data, Key key,String padding) {
  228. try {
  229. return new String(Base64.encode(encode( data,
  230. key,padding)));
  231. } catch (Exception e) {
  232. throw new RuntimeException("encrypt fail!", e);
  233. }
  234. }
  235. public static String decode(byte[] decodeByteArray, Key key,String padding) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, IOException, NoSuchProviderException {
  236. final Cipher cipher = Cipher.getInstance(padding, PROVIDER);
  237. cipher.init(Cipher.DECRYPT_MODE, key);
  238. StringBuilder sb = new StringBuilder();
  239. for (int i = 0; i < decodeByteArray.length; i += 128) {
  240. byte[] doFinal = cipher.doFinal(ArrayUtils.subarray(decodeByteArray, i, i + 128));
  241. sb.append(new String(doFinal));
  242. }
  243. return sb.toString();
  244. }
  245. /**
  246. * 解密
  247. *
  248. * @param data
  249. * @param key
  250. * @return
  251. */
  252. public static String decodeFromBase64(String data, Key key,String padding) {
  253. try {
  254. return new String(decode(Base64.decode(data.getBytes()), key,padding).getBytes(),
  255. "UTF-8");
  256. } catch (Exception e) {
  257. throw new RuntimeException("encrypt fail!", e);
  258. }
  259. }
  260. /**
  261. * 得到密钥字符串(经过base64编码)
  262. *
  263. * @return
  264. */
  265. public static String getKeyString(Key key) throws Exception {
  266. byte[] keyBytes = key.getEncoded();
  267. String s = (new BASE64Encoder()).encode(keyBytes);
  268. return s;
  269. }
  270. public static String getKeyStringByCer(String path) throws Exception{
  271. CertificateFactory cff = CertificateFactory.getInstance("X.509");
  272. FileInputStream fis1 = new FileInputStream(path);
  273. Certificate cf = cff.generateCertificate(fis1);
  274. PublicKey pk1 = cf.getPublicKey();
  275. String key = getKeyString(pk1);
  276. System.out.println("public:\n" + key);
  277. return key;
  278. }
  279. public static String getKeyStringByPfx(String strPfx, String strPassword){
  280. try {
  281. KeyStore ks = KeyStore.getInstance("PKCS12");
  282. FileInputStream fis = new FileInputStream(strPfx);
  283. // If the keystore password is empty(""), then we have to set
  284. // to null, otherwise it won't work!!!
  285. char[] nPassword = null;
  286. if ((strPassword == null) || strPassword.trim().equals("")){
  287. nPassword = null;
  288. }
  289. else
  290. {
  291. nPassword = strPassword.toCharArray();
  292. }
  293. ks.load(fis, nPassword);
  294. fis.close();
  295. System.out.println("keystore type=" + ks.getType());
  296. // Now we loop all the aliases, we need the alias to get keys.
  297. // It seems that this value is the "Friendly name" field in the
  298. // detals tab <-- Certificate window <-- view <-- Certificate
  299. // Button <-- Content tab <-- Internet Options <-- Tools menu
  300. // In MS IE 6.
  301. Enumeration enumas = ks.aliases();
  302. String keyAlias = null;
  303. if (enumas.hasMoreElements())// we are readin just one certificate.
  304. {
  305. keyAlias = (String)enumas.nextElement();
  306. System.out.println("alias=[" + keyAlias + "]");
  307. }
  308. // Now once we know the alias, we could get the keys.
  309. System.out.println("is key entry=" + ks.isKeyEntry(keyAlias));
  310. PrivateKey prikey = (PrivateKey) ks.getKey(keyAlias, nPassword);
  311. Certificate cert = ks.getCertificate(keyAlias);
  312. PublicKey pubkey = cert.getPublicKey();
  313. String basePrikey = RSA.getKeyString(prikey);
  314. System.out.println("cert class = " + cert.getClass().getName());
  315. System.out.println("cert = " + cert);
  316. System.out.println("public key = " + pubkey);
  317. System.out.println("private key = " + prikey);
  318. System.out.println("pubkey key = " + RSA.getKeyString(pubkey));
  319. System.out.println("prikey key = " + RSA.getKeyString(prikey));
  320. System.out.println("pubkey key length = " + RSA.getKeyString(pubkey).length());
  321. System.out.println("prikey key length = " + RSA.getKeyString(prikey).length());
  322. return basePrikey;
  323. }
  324. catch (Exception e)
  325. {
  326. e.printStackTrace();
  327. }
  328. return null;
  329. }
  330. /**
  331. * 512位PKCS#8
  332. * @param args
  333. * @throws Exception
  334. */
  335. public static void main(String[] args) throws Exception {
  336. //getKeyStringByCer("/usr/local/cjpayProductServerCertExpiryDate20170509.cer");
  337. //String privatekey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDYNb+tFTFM+V4kzeeubf5iUPgKl50kxXuEJ57qrFJ0iC0eHpOlw3axqD+zjnWQ+/R1yWUl77SOqgvowmtbKz1qLgXyB57G2lAveL48tp0yyd+tfQMQkW1duT27lGp1bAj/lhwVulvUSzJPqlc4mBt0F+/jEGQ4VZRmR0NxhMbutj7pu61rawZDqS/FSrcnt872uHaUsF+b7c2JcOl7qyB3ySLcMjkJ6rAonYohMCfy0ZT9KruRJQMXtVAbuDLxS+BASDYeE1aOqbg+KPQRfCPdM6t0FX4Y0o6y6cwhd6GQ2OcM6o4lUoKIV6ggeZWG/CHwm85mQ5dbhb7JhMj80CMzAgMBAAECggEBANRC0E7IQ4JiPr67NvzUF63F9/3OIwR6rGxtyWJykvC80C6FrkZKwzhfCUrqTRltge4xLhA0aHq3DsIQPP1gUgbv7/5Q5NwscBRq4bkRPvshnWrhFCUr4MbmmWiSqIFm8t6ZLDFYp9afjGERxldVXX54EZZF/V4hBnPy+o9z3ylyC8skTpX91xTlx523UCGRPWG9cLID5OHrhnWfRybeO7ekGzTFSD7pMIZvQ24mrC6eTJZK6QmAMTB6UxEfyQ+scETO5RhwKOl1KngfQ7rjNSr8tfPcj7u5jdu9VbWYgrg/SKzQTkZCzoLeubwVmTdhMvKmN0KZx771sqVfCa21maECgYEA8+nUHAhJpP/iDJUyh0zksBRBlakI4/UR4/LoVzKQ2eQybXmKDFPSGRXse/YQUvFNirtWHYtxruRWmKxUOlbI8ByWo2sSEZZkQ/5/RLLa7GeH46B7iw19fE8kVv6m9uXHSP+DZqPZ+oyMGI1h9CFO9hnGuzR6ZMBtWBuPwAIX/z0CgYEA4ux8wKGMkPPUxmMLSb7nTjy1q9g8K2YdBWNDTed82H9wwTkVdkWRcDmS64PQEglaK3BCBdI5nN4xQ4p/xEaVVicKChl+1kFpErrHIRO0PEHj/X2+UVurGr19ayEimSBbkqP9s8Ilm867zVjgUbBPb5eEGwF2ZWvBzHp62x+90y8CgYB6gmakEdGTi2ZpdYKkjI2Mlw/98KHjhVMQEBB8w4wXtNNTQymAWZV8PhPCi2vVjReqZ7+wJTrbYhrQojXH+5D/cQyEViIELWp88FXSFpd5B+MsBI4o4IS3rDSPcWZBOlYnJxdDtWalvnQbXN/nM9eqKnYzzv7unewNxgIkqaiN7QKBgA3H5tub8/lplWZm5WyZF1r8/NtuylioXuLQ4Gl+wWo0cxiI6vC/0NFL7cw3uQ8fWkaBDsFjvvPz2nILmy7ESpVs0YNDgRxp5IOqrCUqGSv/pGTkmgY+1ulM0K0M2hkKigUhyGp+Q+Jub6FM4HKVjn1sai1prVMDdEWCuqtMBi8pAoGBAMAZp5m+dUkgG9nUk4Hek+zGhBTUe56NdgTRRX1m8LofW4G4wIG34nLNxEvGmklQjmgGfg1s/XhBQ+BrNUhD4fP+d5Q78qdNqQGzBamXHgjw3fGwUZJJqnatdTeQlf2hSwOSps6cwECezdB0jdxN8oiWCYFc22wP076jHOiMgU+J";
  338. String publickey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDonLTXehZeFwmsg+zs8AHrsgGPkGXLS7Lhf2RMOHmAHC/MsvnrfHfu0GD0FcX7NuXKBJK7KsA0MWlEkHezuoRkZS2xZ79qQzImSVE3POO4g1ZVTsW2Bl9LNN2mkTAsum6ik/vodYzftbS0tT73SvgHk54mAm8cWdiQOEVmdX0yhQIDAQAB";
  339. // System.err.println("-----------"+getKeyStringByCer("/usr/local/businessgate.cer"));
  340. // String padding = RSAECBPKCS1PADDING;
  341. //createKeyPairs(1024);
  342. // String publickey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCN7fVkqM5hzcPg+xTKEOCsMQ2WQyqgaVbMd3atYN9zngW/biNqkt9vo5EWvoZ/WEByXPvanZRKWMPRFU39fxmtAxdl5TBoh+f4utd8TqdQ2c/uMRUzOecNXlvEZZNXN3Pgu/LLr1ss/H2ma+Lwkoq1WBkWzpY5BJqqhBKpQfWPRwIDAQAB";
  343. // System.out.println(publickey.length());
  344. // String privatekey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAI3t9WSozmHNw+D7FMoQ4KwxDZZDKqBpVsx3dq1g33OeBb9uI2qS32+jkRa+hn9YQHJc+9qdlEpYw9EVTf1/Ga0DF2XlMGiH5/i613xOp1DZz+4xFTM55w1eW8Rlk1c3c+C78suvWyz8faZr4vCSirVYGRbOljkEmqqEEqlB9Y9HAgMBAAECgYBREHDwpVn7ksMmZUJih3FL6FiSUpquNHxXHIS0UnhOWRt/UzD3Vhw4b3wXOYsogQeOSn2vSAHC1SBC86AwAcBvqXmKrmuCPoZX0MQkO4tVqfONgE4sq1jbuWHobwP14iZTGqdY69a13Vx6C4PFaOElOkzJbyDA4YkjTBvuR5IvAQJBAPCzgT4uhA73WMsntlI/YhKL7NteA/epUPJbL2UnY6Tf3vqSsvskU9ulgmJLUt1GBG7NFNYXQ6a6I/3GqOPdz7ECQQCW81Iv6Rpns5Ovz1zwpU/bZDwR2Mx+ARDv/DFPH3wJ4J+KJ1XLzEGn9+DLujAkSjrfb1OTNUK2723QOAPYX0R3AkAZwrxkUUok5+gC5h8nMk1mur8Aw1EdYmudZJDv/IU3khYlLyokosCu00nfBzy5HdM/oIdIWnkNEQLlGCvfJ1AhAkBcW2+zxKnVPThlXzh8PIkJsOBYAw/LIJfeXa1FvfvEh1zVyI9j7AtX2//8ZmTCL3Cp+JFoBjRVfVTxCvS/VDqtAkBSU/x90zjwVYDTYPUxyyLz9jYLVu3vHavaTRUTmMn4D4qHSmq3WahYOrrOpI80+Cwrf+bc08hKB+DgNBHpnE0E";
  345. // System.err.println(publickey.length());
  346. // System.err.println(privatekey.length());
  347. PublicKey publicKey = RSA.getPublicKey(publickey);
  348. //PrivateKey privateKey = RSA.getPrivateKey(privatekey);
  349. System.out.println("1");
  350. // String sign = sign("1234",privateKey);
  351. // System.out.println(sign);
  352. System.out.println(verifySign("#TransferSingle#M800029658#20161108105547054321#20161108105547054321#10#ICBC#6212261001064813709#test#B2C#PAYER#true", "RSRECZmnN4f1giR8EnUSaUY9dRf0RAVLWFAoL+IDenMd0QXU9YckvfrS5Xg/EhBPt8W11ee5cqmcIsjAshsV18gF4RcuHint4woMOBiA32tKCE7e4rkjD5/R2x4MRTUv+2eLSyjzOh4nNvFY184WcN7tJdo4tj0o6QVkUJRFqfo=", publicKey));
  353. // String tmp = "104AE7ACA503EF4347DEA3EEFB5DB979747815526A0DD54168BB4B7197F776064CD6724542AFBFDA7B4B6F849B6130407E3709C280AF736CAF324D1D52010BD852BBCC1F5B9C668C1533BB747C1258761B80CA74AB0F2BA7E518A8A4BC7F407B531E7B8EFC877385503D4BE888DF5A113B1C6DC27EB94EFA16E112F23046B4ECE87B30EA62463A9CB0D94805A36D6239B9E587F95FF3E8F540132FE5FA590F52FEC9EC4FBB35C2108CA06F1F51AD6680199B51F85641EBDE5A7DC6127ED12237A86B5E025E0648217B7B8426F23348AF47DEA3EEFB5DB979AE85F4D79480DA150EE81C08064A010DBB900498D56FD7B432046000D768C2297CC3DD0AD15040DFD4EFC9FFCD7728984A4FADD66C8023FC0CF3780EA41D4080A8BC59E35FACBC20598B60BD0DE0C5414F0F380AECE38A98707A545C29D0D88E49A080904EF26202871D4BC06A49F1CEA977C5BC4DBB02786892E78AC3851EA233EE8D325757D64204EB1F637D5A609BC38E3BA2442BEFDE4DB0FD720BBC2F44BE9E0451A4425007C3706E9BF85A1F3F498DC6FFDD3EC2126C7F0EC61787ECF427A085AC5E3AD59E7E3C204BE6B0E89B31131043C210BC0947B51CE07CB37714048DDE18516F7D293969D714523D1F8096E59114409341897AB95064FA860C1E97A316D3D6CCADC2B8FA844541C58F457BCFEAFA022DA453BBB3142AF113CDCD125D1DF096E77244B47C150F3EE5BCDE5931C58C38D9C53C2222C08B0EA5C136EA1A4F2E512FF283430901D4F4212E3EA86B5E025E064821D4A1AE4629EEDDAD6000CD2CBAAE5B630712D23618975E838F620A31B788672896CEAF520A39CAEF37986D3F3CB1352DFDB75D2AAEF197D9F0142CF0FDE71082048F6024013895F461EB07B8A4C4897F7C32F38140BC42309D4E41D2F8F8DA277540506387A01118914B7C6D87ED185BC23CCC73C83B58C477579A1ADB3832678F2611BC14D24876";
  354. // String s3 = RSA.decodeFromBase64(tmp, publicKey, padding);
  355. // System.out.println(s3+"=====s3=====");
  356. // System.out.println(s3.length()+"=====s3=====");
  357. // String plain = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567";
  358. // System.out.println(plain.getBytes().length);
  359. // byte[] encryptByte = RSA.encode(plain, privateKey,padding);
  360. // System.err.println(encryptByte.length+"=====encryptByte=====");
  361. // byte[] sign = RSA.sign(encryptByte, privateKey);
  362. // System.out.println(RSA.verifySign(encryptByte,sign,publicKey));
  363. // String s2 = RSA.decode(encryptByte, publicKey,padding);
  364. // System.out.println(s2+"=====s2=====");
  365. // System.out.println(s2.length()+"=====s2=====");
  366. // String encryptString = RSA.encodeToBase64(plain, privateKey, padding);
  367. // System.err.println(encryptString.length()+"=====encryptString====="+encryptString);
  368. }
  369. }