-1

C# で DES を使用してファイルを復号化しようとすると、「不良データ例外」が発生します。

namespace encrypte
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        static void EncryptFile(string sInputFilename, string sOutputFilename, string sKey)
        {
            FileStream fsInput = new FileStream(sInputFilename,FileMode.Open, FileAccess.Read);
            FileStream fsEncrypted = new FileStream(sOutputFilename,FileMode.Create,FileAccess.Write);
            DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
            DES.Mode = CipherMode.CFB;
            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            DES.Padding = PaddingMode.ISO10126;
            ICryptoTransform desencrypt = DES.CreateEncryptor();
            CryptoStream cryptostream = new CryptoStream(fsEncrypted,desencrypt,CryptoStreamMode.Write);
            byte[] bytearrayinput = new byte[fsInput.Length - 1];
            fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
            cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
            cryptostream.FlushFinalBlock();
            fsInput.Close();
            fsEncrypted.Close();
        }
        static void DecryptFile(string sInputFilename,string sOutputFilename,string sKey)
        {
            DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            DES.Mode = CipherMode.CFB;
            DES.Padding = PaddingMode.ISO10126;
            FileStream fsread = new FileStream(sInputFilename,FileMode.Open,FileAccess.Read);
            ICryptoTransform desdecrypt = DES.CreateDecryptor();
            CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt,CryptoStreamMode.Read);
            StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
            fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
            fsDecrypted.Flush();
            fsDecrypted.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            EncryptFile(@"E:\a.wmv", @"E:\b.wmv", "abcdefgh");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            DecryptFile(@"E:\b.wmv", @"E:\c.wmv", "abcdefgh");
        }
    }
}

この行で「不良データ」例外が発生しました: fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());

4

1 に答える 1

2
static void DecryptFile(string sInputFilename, string sOutputFilename, string sKey)
{
    DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
    DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
    DES.Mode = CipherMode.CFB;
    DES.Padding = PaddingMode.ISO10126;
    FileStream fsread = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);
    ICryptoTransform desdecrypt = DES.CreateDecryptor();
    CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read);
    FileStream fsDecrypted = new FileStream(sOutputFilename,FileMode.Create,FileAccess.Write);
    cryptostreamDecr.CopyTo(fsDecrypted);
    fsDecrypted.Flush();
    fsDecrypted.Close();
}
于 2013-03-29T17:02:21.160 に答える