C# 如何用C加密/解密.xlsx/.doc文件

C# 如何用C加密/解密.xlsx/.doc文件,c#,C#,我正在编写一个应用程序来加密/解密文件,并为此目的使用。这似乎适用于文本文件,但当我对.xlsx文件使用相同的应用程序时,生成的加密文件和解密文件会损坏,我无法再打开该文件。是否有任何方法可以加密/解密不同类型的文件,如.doc..xls等 更新:添加了加密/解密代码 public static void EncryptFile(string filepath,string fileOutput, string key) { FileStream fsInput = n

我正在编写一个应用程序来加密/解密文件,并为此目的使用。这似乎适用于文本文件,但当我对.xlsx文件使用相同的应用程序时,生成的加密文件和解密文件会损坏,我无法再打开该文件。是否有任何方法可以加密/解密不同类型的文件,如.doc..xls等

更新:添加了加密/解密代码

public static  void EncryptFile(string filepath,string fileOutput, string key)
    {
        FileStream fsInput = new FileStream(filepath, FileMode.Open, FileAccess.Read);
        FileStream fsEncrypted = new FileStream(fileOutput, FileMode.Create, FileAccess.Write);

        DESCryptoServiceProvider DESc = new DESCryptoServiceProvider();
        DESc.Key = ASCIIEncoding.ASCII.GetBytes(key);
        DESc.IV = ASCIIEncoding.ASCII.GetBytes(key);

        ICryptoTransform desEncrypt = DESc.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.Close();
        fsInput.Close();
        fsEncrypted.Close();
    }
public static void DecryptFile(string filepath, string fileOutput, string key)
    {
        DESCryptoServiceProvider DESc = new DESCryptoServiceProvider();
        DESc.Key = ASCIIEncoding.ASCII.GetBytes(key);
        DESc.IV = ASCIIEncoding.ASCII.GetBytes(key);

        FileStream fsread = new FileStream(filepath, FileMode.Open, FileAccess.Read);
        ICryptoTransform desDecrypt = DESc.CreateDecryptor();
        CryptoStream cryptoStreamDcr = new CryptoStream(fsread, desDecrypt, CryptoStreamMode.Read);

        StreamWriter fsDecrypted = new StreamWriter(fileOutput);
        fsDecrypted.Write(new StreamReader(cryptoStreamDcr).ReadToEnd());
        fsDecrypted.Flush();
        fsDecrypted.Close();
    }

static void Main(string[] args)
    {
        EncryptFile(@"C:\test1.xlsx", @"c:\test2.xlsx", "ABCDEFGH");
        DecryptFile(@"C:\test2.xlsx", @"c:\test3.xlsx", "ABCDEFGH");
    }

您没有正确加密或解密。Encrypt->Decrypt将始终提供与输入相同的文件。如果您发布代码,我们可能会帮助您查找其中的bug。

您应该按照Kieren Johnstone的一条评论中的建议使用FileStreama。另外,加密时您没有刷新流-这可能不是自动完成的,因此您也应该尝试刷新流。

相同的代码适用于.txt文件,但不适用于.xlsx,因此我假设加密/解密操作正确,但excel需要一些不同的东西。不,恐怕您错了。可能您的代码只适用于某些文本文件,并且“似乎”可以工作,而不是二进制文件,如果代码只是简单地对文件进行加密/解密,这将是一个错误。是的,正如我所怀疑的:您使用的是StreamReader或StreamWriter。他们读写文本文件。而是直接使用FileStream对象。编辑:奇怪的是,您在加密时做得很好,但在解密时使用文本模式。解密需要修复:没错。它只处理文本文件,但并没有为这些函数添加任何特定于txt文件的内容。如何使它与任何文件一起工作?请阅读我的评论。您正在解密中使用StreamWriter和StreamReader。StreamWriter/StreamReader是用于文本文件的类。因此,您专门编写了只适用于文本文件的代码。如果希望它与其他文件一起使用,请不要使用StreamWriter和StreamReader。您可以像加密函数那样使用FileStream。