派生自 projectDept/qhighschool

胡仁荣
2023-09-25 f6df0f0156a8c5eaf2c5f1935c4838563af85c7e
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
package com.qxueyou.scc.base.util;
 
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
 
public class AESUtil {
 
    public static final String charset = "UTF-8";
    private static final String IV = "1234567812345678";
    private static final String defaultPasswd = "0120302323012324";
    
    public static String encrypt(String cleartext) {
        return encrypt(defaultPasswd,cleartext);
    }
 
    public static String encrypt(String dataPassword, String cleartext) {
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec key = new SecretKeySpec(dataPassword.getBytes(), "AES");
            IvParameterSpec iv = new IvParameterSpec(IV.getBytes());
            cipher.init(Cipher.ENCRYPT_MODE, key, iv);
            byte[] encryptedData = cipher.doFinal(cleartext.getBytes(charset));
            return new String(parseByte2HexStr(encryptedData));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
 
    public static String decrypt(String cleartext) {
        return decrypt(defaultPasswd,cleartext);
    }
    
    public static String decrypt(String dataPassword, String encrypted) {
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec key = new SecretKeySpec(dataPassword.getBytes(), "AES");
            IvParameterSpec iv = new IvParameterSpec(IV.getBytes());
            byte[] byteMi = parseHexStr2Byte(encrypted);
            cipher.init(Cipher.DECRYPT_MODE, key, iv);
            byte[] decryptedData = cipher.doFinal(byteMi);
            return new String(decryptedData, charset);
        } catch (Exception e) {
            return null;
        }
    }
 
    /**
     * 将16进制转换为二进制
     * 
     * @param hexStr
     * @return
     */
    public static byte[] parseHexStr2Byte(String hexStr) {
        if (hexStr.length() < 1) {
            return null;
        }
        byte[] result = new byte[hexStr.length() / 2];
        for (int i = 0; i < hexStr.length() / 2; i++) {
            int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
            int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
            result[i] = (byte) (high * 16 + low);
        }
        return result;
    }
 
    /**
     * 将二进制转换成16进制
     * 
     * @param buf
     * @return
     */
    public static String parseByte2HexStr(byte buf[]) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < buf.length; i++) {
            String hex = Integer.toHexString(buf[i] & 0xFF);
            if (hex.length() == 1) {
                sb.append('0');
            }
            sb.append(hex.toUpperCase());
        }
        return sb.toString();
    }
    
    /**
     * AES解密
     */
    public static String decode(String aesKey, String encryptText) {
        try {
            KeyGenerator _generator = KeyGenerator.getInstance("AES");
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
            secureRandom.setSeed(aesKey.getBytes());
            _generator.init(128, secureRandom);
            SecretKey secretKey = _generator.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] result = cipher.doFinal(AESUtil.parseHexStr2Byte(encryptText));
            return new String(result);
        } catch (Exception e) {
            return "";
        }
    }
    
    public static void main(String[] args) {
        
        String publicKey = "30820122300d06092a864886f70d01010105000382010f00303032301006\n" + 
                "072a8648ce3d02002EC311215SHA512withECDSA106052b81040006031e0\n" + 
                "0042cac6fdede70a68027b03be32f81a2c3aca6a715e6937abcc6277e0fG\n" + 
                "82010a028201010097beb94bc6a412279fdcf7b9696279a2dad43e4c0589\n" + 
                "5ce1d14057fa4e60da48e38c0bed81cc668465213dec624fbde46c379468\n" + 
                "1fa1a9fe05ae4595cd82c09cf0a4cea909efd43b8993dffcb2b86d8cdccf\n" + 
                "1986392d60bcbf8aaf0c03RSA4204813SHA512withRSA1b5a1f66abe2be9\n" + 
                "dd9c23b1efbaa48dc9727d1899765d37901d37403af214e45fbdf6831845\n" + 
                "e762cd227c3fa0d0960346b23e30da429881ca3a26a20dcc3c08bba66927\n" + 
                "e1e742184dc92ed0dc61ec97313b5239d47b1099f154928dd06c149c0ae2\n" + 
                "9e6a04674454f89bbf466aa2527138e061a1d85f08bbd4dc0d9f3b3494d0\n" + 
                "c8a406830fe981ee905719082c23767f6e0c59df143549786f5e28587eb4\n" + 
                "f7ba4f8549aff0203010001\n";
 
 
        
        System.out.println(decrypt(publicKey));
    }
    
}