解密即将到来的文本颤振

Decrypt Upcoming Text Flutter

我只想输入字符串,然后按下解密。 这是我的应用程序,但我无法解密字符串原因 _cipher.text 类型 'String'。它的类型应该是 'Encrypted'

onPressed: ()  {
                setState(() {
                  final k = Key.fromUtf8('1234567891011123');
                  final iv = IV.fromLength(16);
                  final encrypter = Encrypter(AES(k));
                  final decrypted = encrypter.decrypt(_cipher.text, iv: iv);
                  _plain.text = decrypted;
                });
              },

我不想使用 final crypted = encrypter.encrypt(_cipher.text, iv: iv); 因为它是加密的。

你不能直接解密字符串。您需要将加密的传递给解密,否则在大多数情况下它会给出块大小错误。

import 'package:encrypt/encrypt.dart';

void main() {
  final cipher = 'Lorem ipsum dolor sit amet';
  final k = Key.fromUtf8('1234567891011123');
  final iv = IV.fromLength(16);

  final encrypter = Encrypter(AES(k));

  final encrypted = encrypter.encrypt(cipher, iv: iv);
  final decrypted = encrypter.decrypt(encrypted, iv: iv);

  print(encrypted.base64);
  print(decrypted);
}

如果您手动将密码设置为 base16base64 字符串,您可以这样做:

import 'package:encrypt/encrypt.dart';

void main() {
  final cipher = 'Xg4+gtUDU0Hd9uMUWU7IJtjxvocKzIOJwumyzbY5n40=';
  final k = Key.fromUtf8('1234567891011123');
  final iv = IV.fromLength(16);

  final encrypter = Encrypter(AES(k));

  final decrypted = encrypter.decrypt(Encrypted.fromBase64(cipher), iv: iv);

  print(decrypted);
}

编辑:如果您从用户那里获取密码输入,您需要验证是否使用加密器,如果它是 base16base64 只有这样您才能继续使用 [=16 解密=] 或 Encrypted.fromBase16(cipher)