C# AES加密-加密字节

C# AES加密-加密字节,c#,encryption,aes,C#,Encryption,Aes,我正在尝试用Aes加密字节。然而,我得到的输出真的很奇怪。这是我的函数(加密和解密)。我做错什么了吗 public static byte[] encryptStream(byte[] plain, byte[] Key, byte[] IV) { byte[] encrypted; ; using (MemoryStream mstream = new MemoryStream()) { using (AesCry

我正在尝试用Aes加密字节。然而,我得到的输出真的很奇怪。这是我的函数(加密和解密)。我做错什么了吗

public static byte[] encryptStream(byte[] plain, byte[] Key, byte[] IV)
    {
        byte[] encrypted; ;
        using (MemoryStream mstream = new MemoryStream())
        {
            using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
            {
                using (CryptoStream cryptoStream = new CryptoStream(mstream,
                    aesProvider.CreateEncryptor(Key, IV), CryptoStreamMode.Write))
                {
                    cryptoStream.Write(plain, 0, plain.Length);
                }

            }
            encrypted = mstream.ToArray();
        }
        return encrypted;
    }

public static byte[] decryptStream(byte[] encrypted, byte[] Key, byte[] IV)
    {
        byte[] plain;
        using (MemoryStream mStream = new MemoryStream())
        {
            using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
            {
                using (CryptoStream cryptoStream = new CryptoStream(mStream,
                    aesProvider.CreateDecryptor(Key, IV), CryptoStreamMode.Read))
                {
                    cryptoStream.Read(encrypted, 0, encrypted.Length);
                }
            }
            plain = mStream.ToArray();
        }
        return plain;
    }

问题出在
decryptStream()
方法中,当您从加密的缓冲区中读取加密流时。调用
Read()
时,您已经在读取加密的缓冲区,因为您使用内存流对其进行了包装。您希望读入一个新的缓冲区,该缓冲区连接在一起将是解密的字节

    public static byte[] decryptStream(byte[] encrypted, byte[] Key, byte[] IV)
    {
        byte[] plain;
        byte[] buffer = new byte[32768];
        int totalRead = 0;
        MemoryStream plainStream = new MemoryStream();
        using (MemoryStream mStream = new MemoryStream(encrypted))
        {
            using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
            {
                using (CryptoStream cryptoStream = new CryptoStream(mStream,
                    aesProvider.CreateDecryptor(Key, IV), CryptoStreamMode.Read))
                {
                    while (true)
                    {
                        int read = cryptoStream.Read(buffer, 0, encrypted.Length);

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

                        totalRead += read;
                    }

                }
            }

            plain = plainStream.ToArray();
        }
        return plain;
    }

非常感谢你。成功了。我想这是一个愚蠢的错误:)