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