我的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-cbc
,aes-128-cbc-hmac-sha1
和aes-128-cbc-hmac-sha256
给予了相同的结果。或者一些比这个更好的方法,它在encrypt package中可用,如下图所示。请给我建议。
1条答案
按热度按时间vd2z7a6w1#
这是@Topaco在我的帖子中的评论摘要。
aes-256-cbc
加密方法需要一个32字节的密钥。使用字符串长度为32的密钥或使用padRight(32, '\x00')
函数。例如:
关于
aes-128-cbc
、aes-128-cbc-hmac-sha1
和aes-128-cbc-hmac-sha256
:套用aes-128-cbc
(ref)