Reputation: 2675
I'm new in Dart and I'm trying to rewrite my kotlin LoginData encryption. I tried to do this with package:encrypt/encrypt.dart
Below you can find my kotlin code which works:
data class LoginData(
val login: String,
val password: String
)
data class LoginBody(
val encrypted: String,
val publicToken: String
)
fun encryptLoginData(loginData: LoginData): LoginBody {
val jsonLoginData: String = Gson().toJson(loginData)
val iv: ByteArray = generateIv()
val publicToken =
String(Base64.encode(iv, DEFAULT_BUFFER_SIZE), StandardCharsets.UTF_8)
val encryptedLoginData: String = encrypt(jsonLoginData, iv)
val encryptedLoginDataBase64Encoded =
String(
Base64.encode(encryptedLoginData.toByteArray(), DEFAULT_BUFFER_SIZE),
Charset.defaultCharset()
)
return LoginBody(encryptedLoginDataBase64Encoded, publicToken)
}
private fun generateIv(): ByteArray {
val iv = ByteArray(16)
SecureRandom().nextBytes(iv)
return iv
}
private fun initCipher(iv: ByteArray): Cipher {
val cipher: Cipher = Cipher.getInstance("AES/CBC/PKCS7Padding")
val secretKeySpec = SecretKeySpec(Constants.PRIVATE_KEY.toByteArray(), 0, 32, "AES")
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, IvParameterSpec(iv))
return cipher
}
private fun encrypt(stringToEncrypt: String, iv: ByteArray): String {
val encrypted: ByteArray =
initCipher(iv).doFinal(stringToEncrypt.toByteArray(Charsets.UTF_8))
return String(Base64.encode(encrypted, DEFAULT_BUFFER_SIZE))
}
DONE WITH FOLLOWING CODE: final encryptedLoginData = encrypter.encrypt(json, iv: iv).base64; final encoded = base64.encode(utf8.encode(encryptedLoginData));
Upvotes: 0
Views: 1212
Reputation: 499
I suggest you to use:
dependencies:
pointycastle: ^2.0.0
encrypt: ^4.1.0
Here after two simple methods to encrypt/decrypt a plain message:
String encrypt(String plainText) {
final key = Key.fromUtf8(password);
final iv = IV.fromLength(16);
final encrypter = Encrypter(AES(key));
final encrypted = encrypter.encrypt(plainText, iv: iv);
return encrypted.base64;
}
String decrypt(String encrypted) {
final key = Key.fromUtf8(password);
final iv = IV.fromLength(16);
final encrypter = Encrypter(AES(key));
final decrypted = encrypter.decrypt64(encrypted, iv: iv);
return decrypted;
}
Upvotes: 1