Last active
May 12, 2021 11:44
-
-
Save iambenkay/19c04aaa2db0d86215054090e740ab5b to your computer and use it in GitHub Desktop.
Perform AES encryption and decryption using Java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.* | |
import javax.crypto.Cipher | |
import javax.crypto.SecretKeyFactory | |
import javax.crypto.spec.IvParameterSpec | |
import javax.crypto.spec.PBEKeySpec | |
import javax.crypto.spec.SecretKeySpec | |
object AES { | |
private val encoder = Base64.getEncoder() | |
private val decoder = Base64.getDecoder() | |
private const val SALT = "randomsalt" | |
private fun cipher(mode: Int, secretKey: String, ): Cipher { | |
// We generate hash of key so we can get a fixed length of 32 to use for actual AES encryption | |
// Feel free to skip if your input key will be at least 32 bytes. | |
val key = generateHashOfKey(secretKey) | |
val c = Cipher.getInstance("AES/CBC/PKCS5Padding") | |
val sk = SecretKeySpec(key.sliceArray(0..31), "AES") | |
val iv = IvParameterSpec(key.sliceArray(0..15)) | |
c.init(mode, sk, iv) | |
return c | |
} | |
fun encrypt(str: String, secretKey: String): String { | |
val encrypted = cipher(Cipher.ENCRYPT_MODE, secretKey).doFinal(str.toByteArray(Charsets.UTF_8)) | |
return encoder.encodeToString(encrypted) | |
} | |
fun decrypt(str: String, secretKey: String): String { | |
val byteStr = decoder.decode(str.toByteArray(Charsets.UTF_8)) | |
return String(cipher(Cipher.DECRYPT_MODE, secretKey).doFinal(byteStr)) | |
} | |
private fun generateHashOfKey(key: String): ByteArray { | |
val skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1") | |
val spec = PBEKeySpec(key.toCharArray(), SALT.toByteArray(), 1000, 256) | |
val secret = skf.generateSecret(spec) | |
return secret.encoded | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment