在Android加密的Dart中解密文本
我正试图在Dart中解密一个我在Android中编码的字符串。我已经尝试了所有我能想到的在dart上使用加密包的方法,但似乎都不起作用 以下是android代码:在Android加密的Dart中解密文本,android,encryption,dart,Android,Encryption,Dart,我正试图在Dart中解密一个我在Android中编码的字符串。我已经尝试了所有我能想到的在dart上使用加密包的方法,但似乎都不起作用 以下是android代码: fun String.encrypt(): String { fun getByteBuffer(crypt: ByteArray, iv: ByteArray): ByteArray { val byteBuffer = ByteBuffer.allocate(4 + iv.size + crypt.siz
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)
}
颤振加密包不支持AES/GCM。尝试使用软件包read me中提到的支持模式
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”。我读到GCM基本上是ctrv,所以我使用了它。你知道有支持gcm的软件包吗?问题是我的Android代码已经存在很长时间了,所以我无法更改它,因为那里已经有很多数据了。阅读这个github链接:我不知道它是否有效,但值得尝试如果它不起作用,在java端部署一个加密/解密方法,并使用平台通道从flifter调用它。同时阅读本文:谢谢,我当前的问题是,当我尝试从base64解码时,它似乎是不正确的