Seasoning.getSalt(), iterations: Int = 10000, keyLength: Int = 512): ByteArray { val keySpec = PBEKeySpec(password.toCharArray(), salt, iterations, keyLength * 8) return getKeyFactory().generateSecret(keySpec).encoded } fun getKeyFactory(): SecretKeyFactory { val algorithm = if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) { "PBKDF2WithHmacSHA1And8bit" } else { "PBKDF2WithHmacSHA1" } return SecretKeyFactory.getInstance(algorithm) } fun getSalt(size: Int = 16): ByteArray { val random = SecureRandom.getInstance("SHA1PRNG") val salt = ByteArray(size) random.nextBytes(salt) return salt }