lmw
2023-04-03 16ea883d3c03fd8b910f9282aa1bc08378d40d54
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
package cn.sinata.util;
 
import android.annotation.SuppressLint;
 
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
 
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
 
public class DES {
 
    public static final String CHAR_SET = "utf-8";
 
    private static byte[] iv;
    //密钥
    private static byte[] skey;
 
    @SuppressWarnings("JniMissingFunction")
    public static native byte[] getKeyValue();
 
    @SuppressWarnings("JniMissingFunction")
    public static native byte[] getIv();
 
    static {
        System.loadLibrary("security");
        skey = getKeyValue();
        iv = getIv();
    }
 
    @SuppressLint("TrulyRandom")
    /**
     * 加密
     * @param encryptString 待加密字�?
     * @return 加密后字符串
     */
    public static String encryptDES(String encryptString) {
 
        IvParameterSpec zeroIv = new IvParameterSpec(iv);
 
        SecretKeySpec key = new SecretKeySpec(skey, "DES");
 
        try {
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
 
            cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
 
            byte[] encryptedData = cipher.doFinal(encryptString.getBytes());
 
            return Base64DES.encode(encryptedData);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (InvalidAlgorithmParameterException e) {
            e.printStackTrace();
        }
        return encryptString;
    }
 
    /**
     * DES解密
     *
     * @param decryptString 待解密字符
     * @return 解密后字符串
     */
    public static String decryptDES(String decryptString) {
        byte[] byteMi = Base64DES.decode(decryptString);
 
        IvParameterSpec zeroIv = new IvParameterSpec(iv);
 
        SecretKeySpec key = new SecretKeySpec(skey, "DES");
 
        try {
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);
 
            byte decryptedData[] = cipher.doFinal(byteMi);
 
            return new String(decryptedData, CHAR_SET);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (InvalidAlgorithmParameterException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
 
        return decryptString;
    }
 
    @SuppressLint("DefaultLocale")
    public static String parseByte2HexStr(byte buf[]) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < buf.length; i++) {
            String hex = Integer.toHexString(buf[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            sb.append(hex.toUpperCase());
        }
        return sb.toString();
    }
}