У меня есть веб-сервис, где я читаю поток данных из запроса POST.Но когда я читаю его из Request.InputStream, я получаю сообщение об ошибке « Входные данные не являются полным блоком ».
Однако, когда я пытаюсь прочитать его из файла, который был отправлен мне моим коллегой, он работает, даже если оба содержат одни и те же данные.
Ниже приведены данные:
3721 b1cc 1759 3067 f993 7c3d bda9 4f04 547c ea1b 3974 2bd1 f213 74a5 2036 7927 e679 bab5 7bbc 3fbf 6a30 85e9 38a8 575 5755 5757 575 575 575 575 575 5757 5755 5757 5757 5757 5757 5755 5755 5757 5755 5757 5755 5756757d32 ce07 9e47 9ad7 34fe b70a 331d 7c4a a5e7 12b1 594a d329 74bb 5d24 2088 738a 9978 CECC 9a04 8686 C451 086b CD44 5e2b cb2b 98dB d9ec 73ef 9433 c9f3 185C 3d8e A610 6f30 642C 83e0 3ce4 4804 74aa 22cf 6378 d49c FD73 a6e9 d0ab 53cd 3cb5 f4da a05f 93c9e4ae 6a53 91ee aa0d 72d7 3ab9 7100 302c
Файл, отправленный моим коллегой, создан из программы lisp, и этот файл успешно расшифрован с использованием моего кода ниже.Но когда я читаю данные выше в качестве входного потока в запросе и пытаюсь расшифровать их, он выдает ошибку.
System.IO.Stream str; String strmContents;
Int32 strLen, strRead;
// read the data
str = Request.InputStream;
strLen = Convert.ToInt32(str.Length);
byte[] strArray = new byte[strLen];
strRead = str.Read(strArr, 0, strLen);
strArray.ToArray();
// This works
byte[] data2 = File.ReadAllBytes("file.data").ToArray();
byte[] dec = decryptMessage(data2);
// This throws error
contents = decryptMessage(strArray);
public string decryptMessage(byte[] data)
{
byte[] decryptedBytes = Decrypt(data, key);
return Encoding.UTF8.GetString(decryptedBytes);
}
public byte[] encryptMessage(string plainText)
{
byte[] encryptedBytes = Encrypt(Encoding.UTF8.GetBytes(plainText), key);
return encryptedBytes;
}
public static byte[] Encrypt(byte[] data, byte[] key)
{
using (AesCryptoServiceProvider csp = new AesCryptoServiceProvider())
{
csp.KeySize = 128;
csp.BlockSize = 128;
csp.Key = key;
csp.Padding = PaddingMode.None;
csp.Mode = CipherMode.ECB;
ICryptoTransform encrypter = csp.CreateEncryptor();
return encrypter.TransformFinalBlock(data, 0, data.Length);
}
}
private static byte[] Decrypt(byte[] data, byte[] key)
{
using (AesCryptoServiceProvider csp = new AesCryptoServiceProvider())
{
csp.KeySize = 128;
csp.BlockSize = 128;
csp.Key = key;
csp.Padding = PaddingMode.None;
csp.Mode = CipherMode.ECB;
ICryptoTransform decrypter = csp.CreateDecryptor();
return decrypter.TransformFinalBlock(data, 0, data.Length);
}
}
Пожалуйста, дайте мне знать, если вы считаете, что я делаю это неправильно.