dart - 在加密器中使用£符号有什么问题?

标签 dart

当我根据AES加密器在密码中使用£符号时,出现错误

Key length must be 128/192/256 bits


String pass = 'my_cool_password_£..............';
var key = Key.fromUtf8(pass);
var encrypter = Encrypter(AES(key));
encrypter.encrypt(plainText, iv: iv); // error `Key length must be 128/192/256 bits`

堆栈跟踪
未处理的异常:
Invalid argument(s): Key length must be 128/192/256 bits
#0      AESFastEngine.init (package:pointycastle/block/aes_fast.dart:66:7)
#1      SICStreamCipher.init (package:pointycastle/stream/sic.dart:55:22)
#2      StreamCipherAsBlockCipher.init (package:pointycastle/adapters/stream_cipher_as_block_cipher.dart:27:18)
#3      PaddedBlockCipherImpl.init (package:pointycastle/padded_block_cipher/padded_block_cipher_impl.dart:43:12)
#4      AES.encrypt (package:encrypt/src/algorithms/aes.dart:19:9)
#5      Encrypter.encryptBytes (package:encrypt/src/encrypter.dart:12:19)
#6      Encrypter.encrypt (package:encrypt/src/encrypter.dart:20:12)

该软件包已使用https://pub.dev/packages/encrypt

这是包encrypt函数
Encrypted encrypt(String input, {IV iv}) {
    return encryptBytes(convert.utf8.encode(input), iv: iv);
}

最佳答案

由于您使用UTF-8表示密码,因此需要考虑到并非所有的字母都只能用1个字节(8位)表示。

例如。 £用两个字节(16位)表示:c2 a3
在以下示例中可以看到:

import 'dart:convert';

void main() {
  print(utf8.encode('my_cool_password_£..............').length * 8); // 264
  print(utf8.encode('my_cool_password_x..............').length * 8); // 256
  print(utf8.encode('£').length * 8); // 16
  print(utf8.encode('£').map((i) => i.toRadixString(16))); // (c2, a3)
}

关于dart - 在加密器中使用£符号有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62018779/

相关文章:

flutter - Dart中推荐的方法是:断言或引发错误

flutter - Flutter 中是否可以在没有 MaterialApp 的情况下使用 GridView?

android - flutter nfc 插件只扫描一次

dart - 为什么 dart 中断言功能被禁用?

javascript - 从位置获取位置

file - Dart语言:编码(与HttpRequest和http_server包有关)

class - 此类被标记为 '@immutable',但是其一个或多个实例字段不是最终的:

flutter - 为什么我无法引用对象的另一个键中的一个键?

android - 在底部工作表栏中显示广播列表图 block

android - 当从图像选择器打开相机时,应用程序 "Lost connection to device."