如何解密使用RijndaelManaged加密的文件

本文关键字:加密 文件 RijndaelManaged 何解 密使 | 更新日期: 2023-09-27 17:53:32

我可以加密图像文件。但是无法解密该文件

while ((readLen = cryptStrm.)Read(bs, 0, bs. length))> 0

谁能猜出哪一部分是错的?我编写的代码如下:

读取加密文件时,根本无法读取。和CryptoStream的属性名为长度和位置有"NotSupportedException",当我使用vss.

查看cryptstream的属性时

我浪费很多时间来解决这个问题.....请帮帮我.....

加密[Bitmap>> encrypted fie]

解密[encrypted fie>> file]


    public static void EncryptFile(
        Bitmap bmp, string destFile, byte[] key, byte[] iv)
    {
        System.Security.Cryptography.RijndaelManaged rijndael =
            new System.Security.Cryptography.RijndaelManaged();
        rijndael.Key = key;
        rijndael.IV = iv;
        System.IO.FileStream outFs = new System.IO.FileStream(
            destFile, System.IO.FileMode.Create, System.IO.FileAccess.Write);
        System.Security.Cryptography.ICryptoTransform encryptor =
            rijndael.CreateEncryptor();
        System.Security.Cryptography.CryptoStream cryptStrm =
            new System.Security.Cryptography.CryptoStream(
                outFs, encryptor,
                System.Security.Cryptography.CryptoStreamMode.Write);
        MemoryStream ms = new MemoryStream();
        bmp.Save(ms, ImageFormat.Jpeg);

        byte[] bs = new byte[1024];
        int readLen;
        while ((readLen = ms.Read(bs, 0, bs.Length)) > 0)
        {
            cryptStrm.Write(bs, 0, readLen);
        }
        ms.Close();
        cryptStrm.Close();
        encryptor.Dispose();
        outFs.Close();
    }

进行解密
    public static void DecryptFile(
        string sourceFile, string destFile, byte[] key, byte[] iv)
    {
        System.Security.Cryptography.RijndaelManaged rijndael =
            new System.Security.Cryptography.RijndaelManaged();
        rijndael.Key = key;
        rijndael.IV = iv;
        System.IO.FileStream inFs = new System.IO.FileStream(
            sourceFile, System.IO.FileMode.Open, System.IO.FileAccess.Read);
        System.Security.Cryptography.ICryptoTransform decryptor =
            rijndael.CreateDecryptor();
        System.Security.Cryptography.CryptoStream cryptStrm =
            new System.Security.Cryptography.CryptoStream(
                inFs, decryptor,
                System.Security.Cryptography.CryptoStreamMode.Read);
        System.IO.FileStream outFs = new System.IO.FileStream(
            destFile, System.IO.FileMode.Create, System.IO.FileAccess.Write);
        byte[] bs = new byte[1024];
        int readLen;
        while ((readLen = cryptStrm.Read(bs, 0, bs.Length)) > 0)
        {
            outFs.Write(bs, 0, readLen);
        }
        outFs.Close();
        cryptStrm.Close();
        decryptor.Dispose();
        inFs.Close();
    }

如何解密使用RijndaelManaged加密的文件

尝试设置rijndael的Mode和Padding成员。
当我做类似的实现时,默认填充模式会引起问题。

            // It is reasonable to set encryption mode to Cipher Block Chaining
            // (CBC). Use default options for other symmetric key parameters.
            rijndael.Mode = CipherMode.CBC;
            rijndael.Padding = PaddingMode.None;