Dart:如何在加密包中使用AES-256-CBC方法?

cnjp1d6j  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(322)

我的PHP服务器使用如下加密。

openssl_encrypt('data', 'AES-256-CBC', '1234567890123456', 0, '1234567890123456')

结果是adVh7c/vcyascTS0Z669IA==
我的dart服务器使用encrypt package,如下所示。

import 'package:encrypt/encrypt.dart' as encrypt;
Encrypter(AES(encryptKey, mode: AESMode.cbc)).encrypt('data', iv: '1234567890123456').base64
final encrypt.Key encryptKey = encrypt.Key.fromUtf8('1234567890123456');
       final encrypt.IV encryptIvKey = encrypt.IV.fromUtf8('1234567890123456');
       final encrypt.Encrypter encrypter = encrypt.Encrypter(encrypt.AES(encryptKey, mode: encrypt.AESMode.cbc));
       print(encrypter.encrypt('data', iv: encryptIvKey).base64);

结果是KQjJ76efmVlgGKDsj6dCog==
这些结果值是不同的。我看到了cipher method of PHP。如果我把PHP服务器中的cipher方法从

AES-256-CBC

aes-128-cbc // or aes-128-cbc-hmac-sha1, aes-128-cbc-hmac-sha256

结果将是KQjJ76efmVlgGKDsj6dCog==。(与dart服务器的结果相同)但在PHP服务器中编辑文件是最后的选择。我可以在dart服务器中做些什么来使结果与PHP服务器的结果相同(AES-256-CBC方法)?
如何在encrypt package中使用AES-256-CBC方法?如果我必须在PHP服务器中编辑文件,我应该使用什么方法?aes-128-cbcaes-128-cbc-hmac-sha1aes-128-cbc-hmac-sha256给予了相同的结果。或者一些比这个更好的方法,它在encrypt package中可用,如下图所示。请给我建议。

vd2z7a6w

vd2z7a6w1#

这是@Topaco在我的帖子中的评论摘要。aes-256-cbc加密方法需要一个32字节的密钥。使用字符串长度为32的密钥或使用padRight(32, '\x00')函数。
例如:

final encrypt.Key encryptKey = encrypt.Key.fromUtf8('1234567890123456'.padRight(32, '\x00'));

关于aes-128-cbcaes-128-cbc-hmac-sha1aes-128-cbc-hmac-sha256:套用aes-128-cbcref

相关问题