在POST数据中读取字节流时,输入数据不是完整的块

问题描述 投票:0回答:1

我有一个Web服务,我正在从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 b877 4855 37e5 5751 f1da ca75 578e 7d32 ce07 9e47 9ad4 33fe7d 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 93c9 e4ae 6a53 91ee

我的同事发送的文件是从lisp程序创建的,该文件使用下面的代码成功解密。但是当我将上面的数据作为Request中的输入流读取并尝试解密时,它会抛出错误。

           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);
    }
}

如果您认为我做错了,请告诉我。

c# encryption aes encryption-symmetric ecb
1个回答
0
投票

答案是错误的数据输入。我们检查了内容长度并散布了,但是然后设备程序员意识到他一直在向我发送有故障的加密数据文件,因此无法正常工作。

另外,为了保留数据格式,我们必须使用Request.BinaryRead()而不是Request.inputStream。

否则,代码有效。谢谢你们!!

© www.soinside.com 2019 - 2024. All rights reserved.