Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android加密的Dart中解密文本_Android_Encryption_Dart - Fatal编程技术网

在Android加密的Dart中解密文本

在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

我正试图在Dart中解密一个我在Android中编码的字符串。我已经尝试了所有我能想到的在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)
}

颤振加密包不支持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解码时,它似乎是不正确的