我有一个用Dart开发的移动客户端,它正在向.NET CORE REST API发送请求。我需要通过以下方式对凭据进行AES加密:使用AES在Dart中加密用户凭据json,然后将请求发送到.NET CORE REST API,然后将其解密。
即使我在两侧使用相同的Key,也使用相同的初始化向量,在服务器端我还是收到以下异常: System.Security.Cryptography.CryptographicException:输入的数据不是完整的块。
我正在使用.NET CORE 2.2.203和Dart 2.3.0。
这是Dart客户端上的加密:
final key = encrypt.Key.fromUtf8('OkREB8tVlnYc0kDmtEE5v33zSP1wP8eB');
final iv = encrypt.IV.fromUtf8('HR92pIjHRe2pIj12');
final encrypter = encrypt.Encrypter(encrypt.AES(key));
final encrypted = encrypter.encrypt(**asd**, iv: iv);
对于字符串 asd ,它会生成以下内容:
X2C+xO2+aKhoITDNEBCHWg==
我正在.NET CORE REST API中使用这种解密:
public static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV)
{
string plaintext = null;
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
plaintext = srDecrypt.ReadToEnd();
}
}
}
}
return plaintext;
}
我用这样的参数调用它(第一个参数是客户端加密的json)
DecryptStringFromBytes_Aes(
(Encoding.ASCII.GetBytes("X2C+xO2+aKhoITDNEBCHWg==")),
(Encoding.ASCII.GetBytes("OkREB8tVlnYc0kDmtEE5v33zSP1wP8eB")),
(Encoding.ASCII.GetBytes("HR92pIjHRe2pIj12"))
);
但是会因以下异常而崩溃:
System.Security.Cryptography.CryptographicException: The input data is not a complete block.
所以我想在服务器端看到的是字符串 asd 。