RSA.java 17 KB

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