首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在加密器中使用£符号有什么问题?

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

Stack Overflow用户
提问于 2020-05-26 09:24:28
回答 1查看 35关注 0票数 0

当我按照AES加密器在密码中使用get符号时,我会得到错误信息。

密钥长度必须为128/192/256位

代码语言:javascript
复制
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`

堆栈跟踪未处理异常:

代码语言:javascript
复制
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函数

代码语言:javascript
复制
Encrypted encrypt(String input, {IV iv}) {
    return encryptBytes(convert.utf8.encode(input), iv: iv);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-26 10:23:10

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

例如,£用两个字节(16位)表示:c2 a3

在以下示例中可以看到这一点:

代码语言:javascript
复制
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)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62018779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档