· 8 years ago · Jan 25, 2018, 04:38 AM
1
2 val AES_PWD_LOGIN_REG = "sinagama"
3 val AES_PWD_PAY = "KEYCC5Q6lWR"
4
5 // Initialize secretKey
6 val key = Base64.decode(keyGenerator(Constants.AES_PWD_LOGIN_REG), Base64.NO_WRAP)
7 val secret = SecretKeySpec(key, "AES")
8-----------------------------------------------------------------------------------------------------------------------
9 // Encrypt
10 @Throws(NoSuchPaddingException::class, NoSuchAlgorithmException::class, InvalidAlgorithmParameterException::class,
11 BadPaddingException::class, InvalidKeyException::class, ShortBufferException::class,
12 IllegalBlockSizeException::class)
13 fun encryptAES(cleartext: String, iv: ByteArray?, secret: SecretKeySpec): String {
14 val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
15 cipher.init(Cipher.ENCRYPT_MODE, secret, if (iv == null) null else IvParameterSpec(iv))
16 val ciphertext = cipher.doFinal(cleartext.toByteArray(charset("UTF-8")))
17 return Base64.encodeToString(ciphertext, Base64.NO_WRAP)
18 }
19-----------------------------------------------------------------------------------------------------------------------
20 // Decrypt
21 fun decryptAES(encrypted: String, iv: ByteArray, secret: SecretKeySpec): String {
22 try {
23 val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
24 cipher.init(Cipher.DECRYPT_MODE, secret, IvParameterSpec(iv))
25 var original = cipher.doFinal(Base64.decode(encrypted, Base64.NO_WRAP))
26 return String(original)
27 } catch (e: NoSuchPaddingException) {
28 e.printStackTrace()
29 } catch (e: NoSuchAlgorithmException) {
30 e.printStackTrace()
31 } catch (e: InvalidAlgorithmParameterException) {
32 e.printStackTrace()
33 } catch (e: BadPaddingException) {
34 e.printStackTrace()
35 } catch (e: InvalidKeyException) {
36 e.printStackTrace()
37 } catch (e: ShortBufferException) {
38 e.printStackTrace()
39 } catch (e: IllegalBlockSizeException) {
40 e.printStackTrace()
41 }
42 return ""
43 }
44-----------------------------------------------------------------------------------------------------------------------
45 // create secretkey
46 fun keyGenerator(pKey: String): String {
47 var key = ""
48 try {
49 val salt = byteArrayOf(-84, -119, 25, 56, -100, 100, -120, -45, 84, 67, 96, 10, 24, 111, 112, -119, 3)
50 val factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1")
51 val spec = PBEKeySpec(pKey.toCharArray(), salt, 1024, 128)
52 val tmp = factory.generateSecret(spec)
53 var secret = SecretKeySpec(tmp.encoded, "AES")
54 key = Base64.encodeToString(secret.encoded, Base64.NO_WRAP)
55 } catch (ex: Exception) {
56 ex.printStackTrace()
57 key = ""
58 }
59 return key
60 }