C#Aes byte [] Encrypt / Decrypt:不是一个完整的块

时间:2018-05-13 11:52:14

标签: c# encryption cryptography aes bytebuffer

我收到错误“输入数据不是一个完整的块”,我不知道我的代码是错还是缺少了什么。我尝试以相同的长度加密/解密字节。

= byte [] plain => MyEnc(plain)=> byte [] encrypted => MyDec(加密)=> byte [] plain

普通和加密的长度相同。

这是我的加密代码:

public static byte[] MyEnc(byte[] Input)
    {
        byte[] inputencdec = Input;
        byte[] encrypted;
        using (MemoryStream mstream = new MemoryStream())
        {
            using (AesCryptoServiceProvider encdec = new AesCryptoServiceProvider())
            {
                encdec.BlockSize = 128;
                encdec.KeySize = 256;
                encdec.Key = ASCIIEncoding.ASCII.GetBytes(Key);
                encdec.IV = ASCIIEncoding.ASCII.GetBytes(IV);
                ICryptoTransform icrypt = encdec.CreateEncryptor(encdec.Key, encdec.IV);

                using (CryptoStream cryptoStream = new CryptoStream(mstream,
                    icrypt, CryptoStreamMode.Write))
                {
                    cryptoStream.Write(inputencdec, 0, inputencdec.Length);
                }

            }
            encrypted = mstream.ToArray();
        }

        return encrypted;
    }

这是我的解密代码:

public static byte[] MyDec(byte[] Input)
    {
        byte[] inputencdec = Input;
        byte[] buffer = new byte[Input.Length];
        int totalRead = 0;
        byte[] plain;

        MemoryStream plainStream = new MemoryStream();

        using (MemoryStream mStream = new MemoryStream(inputencdec))
        {
            using (AesCryptoServiceProvider encdec = new AesCryptoServiceProvider())
            {
                encdec.BlockSize = 128;
                encdec.KeySize = 256;
                encdec.Key = ASCIIEncoding.ASCII.GetBytes(Key);
                encdec.IV = ASCIIEncoding.ASCII.GetBytes(IV);
                ICryptoTransform icrypt = encdec.CreateDecryptor(encdec.Key, encdec.IV);

                using (CryptoStream cryptoStream = new CryptoStream(mStream, icrypt, CryptoStreamMode.Read))
                {
                    while (true)
                    {
                        int read = cryptoStream.Read(buffer, 0, inputencdec.Length);

                        if (read == 0)
                            break;
                        else
                            plainStream.Write(buffer, totalRead, read);

                        totalRead += read;
                    }

                }
            }

            plain = plainStream.ToArray();
        }

        return plain;
    }

0 个答案:

没有答案