如何在 Dart 中使用 CBC 模式和 PCS5Padding 状态的 AES 加密数据?

How to encrypt data using AES with CBC mode and PCS5Padding status in dart?

我需要使用 AES 和 CBC 模式加密一些数据,dart 中的 PCS5Padding 状态。 我进行了搜索,但没有在 pub.dev 中找到任何具有 PCS5Padding 状态的包。 我尝试了以下代码,但这里使用 encrypt 包使用 PCS7Padding 而不是 PCS5Padding 进行加密。

  List plainTranData = [JSON data];
  final iv = IV.fromUtf8(vector value);
  final key = Key.fromUtf8(key);
  final encrypter = Encrypter(AES(key, mode: AESMode.cbc));
  final encrypted =  encrypter.encrypt(plainTranData.toString(), iv: iv);
  print(encrypted.base16);  // <-- encrypted data in Hex/base16

正如 Richard Heap 在评论中指出的那样,它们之间没有实际区别。 PKCS5 实际上只是 PKCS7 的特例。在许多情况下,自称为“PKCS5”的实现实际上实现了 PKCS7。 (这不应该被理解为这里的“5”和“7”是版本号。它们不是。它们指的是特定的 Public Key Cryptography Standards 文档。两个有些不相关的文档包含相同的基本填充策略。没有专门介绍此填充策略的文档。)

有关这方面的更多详细信息,请参阅 crypto.se 上的 What is the difference between PKCS#5 padding and PKCS#7 padding