yzt
2023-05-05 953cbbf76091fee9d40045f91c06daee496fe5b3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package com.hxzkoa.util;
 
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.Writer;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Cipher;
 
public class RSAUtil
{
  public static final String KEY_ALGORITHM = "RSA";
  private static final int KEY_SIZE = 4096;
  private static final String PUBLIC_KEY = "xiaoxiaorenzhe";
  private static final String PRIVATE_KEY = "dadapangzi";
 
  public static Map<String, Object> initKey()
    throws Exception
  {
    KeyPairGenerator keyPairGenerator = 
      KeyPairGenerator.getInstance("RSA");
 
    keyPairGenerator.initialize(4096);
 
    KeyPair keyPair = keyPairGenerator.generateKeyPair();
 
    RSAPublicKey publicKey = (RSAPublicKey)keyPair.getPublic();
 
    RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate();
 
    Map keyMap = new HashMap();
    keyMap.put("xiaoxiaorenzhe", publicKey);
    keyMap.put("dadapangzi", privateKey);
    return keyMap;
  }
 
  public static byte[] encryptByPrivateKey(byte[] data, byte[] key)
    throws Exception
  {
    PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(key);
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");
 
    PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
 
    Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
    cipher.init(1, privateKey);
    return cipher.doFinal(data);
  }
 
  public static byte[] encryptByPublicKey(byte[] data, byte[] key)
    throws Exception
  {
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");
 
    X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(key);
 
    PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);
 
    Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
    cipher.init(1, pubKey);
    return cipher.doFinal(data);
  }
 
  public static byte[] decryptByPrivateKey(byte[] data, byte[] key)
    throws Exception
  {
    PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(key);
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");
 
    PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
 
    Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
    cipher.init(2, privateKey);
    return cipher.doFinal(data);
  }
 
  public static byte[] decryptByPublicKey(byte[] data, byte[] key)
    throws Exception
  {
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");
 
    X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(key);
 
    PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);
 
    Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
    cipher.init(2, pubKey);
    return cipher.doFinal(data);
  }
 
  public static byte[] getPrivateKey(Map<String, Object> keyMap)
  {
    Key key = (Key)keyMap.get("dadapangzi");
    return key.getEncoded();
  }
 
  public static byte[] getPublicKey(Map<String, Object> keyMap)
    throws Exception
  {
    Key key = (Key)keyMap.get("xiaoxiaorenzhe");
    return key.getEncoded();
  }
 
  public static String keyOper(String pathName, String operType, String key)
    throws IOException
  {
    if (operType.equals("read")) {
      BufferedReader bReader = new BufferedReader(new InputStreamReader(
        new FileInputStream(new File(pathName)), "UTF-8"));
      StringBuilder sb = new StringBuilder();
      String s = "";
      while ((s = bReader.readLine()) != null) {
        sb.append(s + "\n");
      }
      bReader.close();
      String str = sb.toString();
      return str;
    }
    Writer out = new FileWriter(new File(pathName));
    out.write(key);
    out.close();
    return "";
  }
 
  public static void main(String[] args)
    throws Exception
  {
    String publicKey = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApdPNzs/yvJkYui7iXXyHoa3aTWNurZh8OTHEP4uMecmMzTXf+Tf1iSLijin6YYtcEzIMulNufMzqzvWqZ8H1Own4MKv83E0uPBsV1oWYHOEz/MrdeSNlIGepxTcVkZZmnWDau5rUrj/dv+CpAuMbSQ+UZhOdam5SxxAteRsU2JbVBI8WEXmQ/zGuBKWD4ahJfpNhrD6bZB04IIBB0+OM0sd5D8vm0lKb+u6jI+FVQ9qgn1md7gBsnYy+1N6Mo/E8mbrM/Y4qKJrFm2JGJR9fY5Izxtf85sEzCMDitk7x6rOgbC7gvOztBhg5e2MKEbz/RlE4ZjDmS8qzIWoQJKNFRgoLnkIwA59qpDxSwfPZkCINwe2cU72qjufTblibBiW0yqUsbQBHYEQI73XXmTDGRbuJWNp+G3LLhtPRTs+rjoNmx3mNawqgq3h1oIEYrBDja1Z24Jr0d3bWdJZe5x8nVHEeBhcSgTJFyySzYRtBDeGLKedWSTxJns2axEKs3vP/k1nyPyZItPFifpibv0nfmiRer1tO0GToFbsmFTSKGHdTG98xr0EEQQRk2O1/5sUBdqoOHLV8ba2si5/5ztpZ/jxF0iTiZbSJAMMAZZaukMmD9MDP4PVwylZatXXdWykX0qiSZ0uP6XvsL7dmJAldsXeJ9eDfLSm/cgz1+yzLNAcCAwEAAQ==";
    String jsonStr = "abc123";
    byte[] json = encryptByPublicKey(jsonStr.getBytes(), 
    Base64.decode(publicKey));
    String json1 = Base64.encode(json);
    System.out.println("加密后的数据:" + json1);
   String privateKey = "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";
    byte[] decode2 = decryptByPrivateKey(Base64.decode(json1), 
    Base64.decode(privateKey));
    System.out.println(new String(decode2, "UTF-8"));
  }
}