Невозможно расшифровать зашифрованный дартс json в .NET CORE - PullRequest
0 голосов
/ 09 июля 2019

У меня есть мобильный клиент, разработанный в Dart, который отправляет запросы в API .NET CORE REST.Мне нужно AES зашифровать учетные данные следующим образом: зашифровать учетные данные пользователя json в Dart с помощью AES, затем отправить запрос в .NET CORE REST API, а затем расшифровать его.

Даже если я использую тот же ключ нас обеих сторон и с одним и тем же вектором инициализации, я получаю следующее исключение на стороне сервера: 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...