Android 如何使用Padding';ISO10126';在颤振中进行AES加密?

Android 如何使用Padding';ISO10126';在颤振中进行AES加密?,android,flutter,encryption,aes,padding,Android,Flutter,Encryption,Aes,Padding,我正在使用加密:^4.1.0颤振库进行AES加密 这是我的密码: import 'package:encrypt/encrypt.dart'; class AesEncryption { encryption() { final plainText = '{"Username":"01717222787",RefId":"5c6de3e4-ea65-49be-bdc5-7eba0128fefc"}';

我正在使用
加密:^4.1.0
颤振库
进行AES加密

这是我的密码:

import 'package:encrypt/encrypt.dart';

class AesEncryption {
  encryption() {
  final plainText =
        '{"Username":"01717222787",RefId":"5c6de3e4-ea65-49be-bdc5-7eba0128fefc"}';
    final key = Key.fromUtf8('32 length code ...');
    final iv = IV.fromUtf8('16 lenght code...');

    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);
  }
}
Flatter库表示,不支持填充/零填充,但
encrypter=encrypter(AES(key,mode:AESMode.cbc,padding:null))
不起作用

我想使用
encrypter=encrypter(AES(key,mode:AESMode.cbc,padding:'ISO10126'))
,它已经在我的服务器代码中使用过。我发现
填充:'ISO7816-4'
这个,但是加密的数据与服务器不同


有没有办法在
AES.CBC
模式下对AES加密使用
填充:“ISO10126”

flatter不支持对AES加密使用填充“ISO10126”。相反,我找到了一个解决方案,我们可以通过使用。我们还将两端的填充“ISO10126”更改为“PKCS7”。下面是最后一段代码:


本质上是一个围绕着一部分功能的包装,而这部分功能似乎并没有提供ISO 10126(顺便说一句,2007年撤销)(参见填充部分)。如果您找不到支持此填充的库,并且出于兼容性原因需要它,您可以自己实现它(这不是很难,请参阅)。为此,您必须使用
padding:null
@Topaco禁用隐式填充。谢谢您的回答。我已经试过填充
ISO7816-4
。但问题是,在服务器端
ISO10126
是实现的。因此加密和解密的值不匹配。是的,PointyCastle(以及基于它的加密包)似乎不支持ISO 10126(请参阅我第一条评论中的链接)。因此,我的建议是(如果您找不到任何其他支持ISO 10126的库),禁用隐式填充并自己实现ISO 10126。这可能是一个选项。
import 'package:encrypt/encrypt.dart'; 

class AesEncryption {   
     
String encryption(String plainText) {
     
     final key = Key.fromBase64(ENCRYPTION_KEY);
     final iv = IV.fromBase64(ENCRYPTION_IV);

     final encrypter = Encrypter(AES(key, mode: AESMode.cbc, padding: 'PKCS7'));
     final encrypted = encrypter.encrypt(plainText, iv: iv);

 return encrypted.base64;   
}

String decryption(String plainText) {

   final key = Key.fromBase64(ENCRYPTION_KEY);
   final iv = IV.fromBase64(ENCRYPTION_IV);

   final encrypter = Encrypter(AES(key, mode: AESMode.cbc, padding: 'PKCS7'));
   final decrypted = encrypter.decrypt(Encrypted.from64(plainText), iv: iv);

  return decrypted;   
 } 
}