lmw
2023-05-12 f67802a41f9e01444d1115f34ecc6e1beb05fc3b
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
package cn.sinata.util
 
import android.annotation.SuppressLint
import cn.sinata.xldutils.sysErr
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
 
object DES {
 
    private val CHAR_SET = "utf-8"
 
    private var iv: ByteArray? = null
    //密钥
    private var skey: ByteArray? = null
 
    external fun getKeyValue(): ByteArray
 
    external fun getIv(): ByteArray
 
    init {
//        System.loadLibrary("security")
//        skey = getKeyValue()
//        iv = getIv()
        skey = "YYPWAPP=".toByteArray()
        iv = byteArrayOf(12, 22, 32, 43, 51, 64, 57, 98)
    }
 
    /**
     * 加密
     * @param encryptString 待加密字符
     * @return 加密后字符串
     */
    @SuppressLint("TrulyRandom")
    fun encryptDES(encryptString: String): String {
 
        val zeroIv = IvParameterSpec(iv)
 
        val key = SecretKeySpec(skey, "DES")
 
        try {
            val cipher = Cipher.getInstance("DES/CBC/PKCS5Padding")
 
            cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv)
 
            val encryptedData = cipher.doFinal(encryptString.toByteArray(charset(CHAR_SET)))
 
            return Base64DES.encode(encryptedData)
        } catch (e: NoSuchAlgorithmException) {
            e.printStackTrace()
        } catch (e: NoSuchPaddingException) {
            e.printStackTrace()
        } catch (e: IllegalBlockSizeException) {
            e.printStackTrace()
        } catch (e: BadPaddingException) {
            e.printStackTrace()
        } catch (e: InvalidKeyException) {
            e.printStackTrace()
        } catch (e: InvalidAlgorithmParameterException) {
            e.printStackTrace()
        }
 
        return encryptString
    }
 
    /**
     * DES解密
     *
     * @param decryptString 待解密字符
     * @return 解密后字符串
     */
    fun decryptDES(decryptString: String): String {
 
        val byteMi = Base64DES.decode(decryptString)
 
        val zeroIv = IvParameterSpec(iv)
 
        val key = SecretKeySpec(skey, "DES")
 
        try {
            val cipher = Cipher.getInstance("DES/CBC/PKCS5Padding")
            cipher.init(Cipher.DECRYPT_MODE, key, zeroIv)
 
            val decryptedData = cipher.doFinal(byteMi)
 
            return String(decryptedData, charset(CHAR_SET))
        } catch (e: NoSuchAlgorithmException) {
            e.printStackTrace()
        } catch (e: NoSuchPaddingException) {
            e.printStackTrace()
        } catch (e: InvalidKeyException) {
            e.printStackTrace()
        } catch (e: InvalidAlgorithmParameterException) {
            e.printStackTrace()
        } catch (e: UnsupportedEncodingException) {
            e.printStackTrace()
        } catch (e: IllegalBlockSizeException) {
            e.printStackTrace()
        } catch (e: BadPaddingException) {
            e.printStackTrace()
        }
 
//        val s = decryptDES(decryptString)
//        System.err.println("des--------------->" + s)
        return decryptString
 
//        val byteMi = Base64DES.decode(decryptString)
//
//        val zeroIv = IvParameterSpec(iv)
//
//        val key = SecretKeySpec(skey, "DES")
//
//        try {
//            val cipher = Cipher.getInstance("DES/CBC/PKCS5Padding")
//            cipher.init(Cipher.DECRYPT_MODE, key, zeroIv)
//            val decryptedData = cipher.doFinal(byteMi)
//            return String(decryptedData, charset(CHAR_SET))
//        } catch (e: NoSuchAlgorithmException) {
//            e.printStackTrace()
//        } catch (e: NoSuchPaddingException) {
//            e.printStackTrace()
//        } catch (e: InvalidKeyException) {
//            e.printStackTrace()
//        } catch (e: InvalidAlgorithmParameterException) {
//            e.printStackTrace()
//        } catch (e: UnsupportedEncodingException) {
//            e.printStackTrace()
//        } catch (e: IllegalBlockSizeException) {
//            e.printStackTrace()
//        } catch (e: BadPaddingException) {
//            e.printStackTrace()
//        }
//
//        return decryptString
    }
}