1 //加密方式
2 public static final String KEY_ALGORITHM = "RSA";
3 //公钥
4 public static final String PUBLIC_KEY = "RSAPublicKey";
5 //私钥
6 public static final String PRIVATE_KEY = "RSAPrivateKey";
7
8 public static void main(String[] args) {
9
10 Map<String, Object> map;
11 try {
12 map=initKey();
13 String publicKey = getPublicKey(map);
14 System.out.println(publicKey);
15 String privateKey = getPrivateKey(map);
16 System.out.println(privateKey);
17 } catch (Exception e) {
18 e.printStackTrace();
19 }
20
21 }
22 /**
23 * 获取公钥
24 * @param keyMap
25 * @return
26 */
27 public static String getPublicKey(Map<String, Object> keyMap){
28 //获取map中的公钥转化为key对象
29 Key key = (Key) keyMap.get(PUBLIC_KEY);
30 return encryptBASE64(key.getEncoded());
31 }
32
33
34 /**
35 * {@link Map}
36 * map中存放私钥和公钥
37 * @return
38 * @throws Exception
39 */
40 public static Map<String, Object> initKey() throws Exception{
41 //获得对象 KeyPairGenerator 参数 RSA 1024个字节
42 KeyPairGenerator key = KeyPairGenerator.getInstance(KEY_ALGORITHM);
43 key.initialize(1024);//这个地方官方文档说的必须初始化 可以参考一下jdk1.8官方文档
44 KeyPair generateKeyPair = key.generateKeyPair();
45 //通过对象 KeyPair 获取RSA公私钥对象RSAPublicKey RSAPrivateKey
46 RSAPublicKey publicKey = (RSAPublicKey) generateKeyPair.getPublic();
47 RSAPrivateKey privateKey = (RSAPrivateKey) generateKeyPair.getPrivate();
48 Map<String, Object> map = new HashMap<String, Object>(2);
49 map.put(PUBLIC_KEY, publicKey);
50 map.put(PRIVATE_KEY, privateKey);
51 return map;
52 }
53
54 /**
55 * 获取私钥
56 * @param keyMap
57 * @return
58 */
59 public static String getPrivateKey(Map<String, Object> keyMap){
60 //获取map中的公钥转化为key对象
61 Key key = (Key) keyMap.get(PRIVATE_KEY);
62 return encryptBASE64(key.getEncoded());
63 }
64
65 /**
66 * 解码返回字节数组
67 * @param key
68 * @return
69 * @throws IOException
70 */
71 public static byte[] decryptBASE64(String key) throws IOException {
72 return new BASE64Decoder().decodeBuffer(key);
73 }
74 /**
75 * 编码返回字符串
76 * @param encoded
77 * @return
78 */
79 public static String encryptBASE64(byte[] encoded) {
80 return new BASE64Encoder().encodeBuffer(encoded);
81 }