我正在尝试用我在Android中编码的Dart解密字符串。我已经尝试过所有可以想到的在dart上使用加密包的尝试,但似乎无法正常工作。
这是android代码:
fun String.encrypt(): String {
fun getByteBuffer(crypt: ByteArray, iv: ByteArray): ByteArray {
val byteBuffer = ByteBuffer.allocate(4 + iv.size + crypt.size)
byteBuffer.putInt(iv.size)
byteBuffer.put(iv)
byteBuffer.put(crypt)
return byteBuffer.array()
}
val key = EncryptionExtension.encryptionKey.toByteArray()
val iv = ByteArray(12)
SecureRandom().apply { nextBytes(iv) }
val cipher = Cipher.getInstance("AES/GCM/NoPadding")
cipher.init(Cipher.ENCRYPT_MODE, SecretKeySpec(key, "AES"), GCMParameterSpec(128, iv))
return Base64.encodeToString(getByteBuffer(cipher.doFinal(this.toByteArray(Charsets.UTF_8)), iv), Base64.DEFAULT)
}
答案 0 :(得分:0)
Flutter加密软件包不支持AES / GCM。尝试使用包裹中的“阅读我”中提到的支持模式。
import 'package:encrypt/encrypt.dart';
void main() {
final plainText = 'hello';
final key = Key.fromUtf8('this is a key');
final iv = IV.fromLength(16);
final encrypter = Encrypter(AES(key, mode: AESMode.cbc));
final encrypted = encrypter.encrypt(plainText, iv: iv);
final decrypted = encrypter.decrypt(encrypted, iv: iv);
print(decrypted);
print(encrypted.base64);
}
然后在Java代码上将“ AES / GCM / NoPadding”更改为“ AES / CBC / NoPadding”,其余部分需要修改。