无法在.NET CORE中解密Dart加密的json

时间:2019-07-09 12:39:15

标签: c# encryption flutter aes

我有一个用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

0 个答案:

没有答案