如何保护文件

本文关键字:文件 保护 何保护 | 更新日期: 2023-09-27 18:08:28

我有一个名为Sample的文件。它可能是任何类型的(. txt/doc/docx/. pdf/……)。现在我要为该文件设置密码。如果它是可能的只是帮助我的代码。

如何保护文件

您可以使用自己的密码或使用生成的密钥加密文件(参见文档)

来自MSDN的示例:

class Class1
{
      //  Call this function to remove the key from memory after use for security
      [System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]
      public static extern bool ZeroMemory(IntPtr Destination, int Length);
  // Function to Generate a 64 bits Key.
  static string GenerateKey() 
  {
     // Create an instance of Symetric Algorithm. Key and IV is generated automatically.
     DESCryptoServiceProvider desCrypto =(DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
     // Use the Automatically generated key for Encryption. 
     return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
  }
  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.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
     DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
     ICryptoTransform desencrypt = DES.CreateEncryptor();
     CryptoStream cryptostream = new CryptoStream(fsEncrypted, 
        desencrypt, 
        CryptoStreamMode.Write); 
     byte[] bytearrayinput = new byte[fsInput.Length];
     fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
     cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
     cryptostream.Close();
     fsInput.Close();
     fsEncrypted.Close();
  }
  static void DecryptFile(string sInputFilename, 
     string sOutputFilename,
     string sKey)
  {
     DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
     //A 64 bit key and IV is required for this provider.
     //Set secret key For DES algorithm.
     DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
     //Set initialization vector.
     DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
     //Create a file stream to read the encrypted file back.
     FileStream fsread = new FileStream(sInputFilename, 
        FileMode.Open, 
        FileAccess.Read);
     //Create a DES decryptor from the DES instance.
     ICryptoTransform desdecrypt = DES.CreateDecryptor();
     //Create crypto stream set to read and do a 
     //DES decryption transform on incoming bytes.
     CryptoStream cryptostreamDecr = new CryptoStream(fsread, 
        desdecrypt,
        CryptoStreamMode.Read);
     //Print the contents of the decrypted file.
     StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
     fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
     fsDecrypted.Flush();
     fsDecrypted.Close();
  } 
  static void Main()
  {
     // Must be 64 bits, 8 bytes.
     // Distribute this key to the user who will decrypt this file.
     string sSecretKey;
     // Get the Key for the file to Encrypt.
     sSecretKey = GenerateKey();
     // For additional security Pin the key.
     GCHandle gch = GCHandle.Alloc( sSecretKey,GCHandleType.Pinned );
     // Encrypt the file.        
     EncryptFile(@"C:'MyData.txt", 
        @"C:'Encrypted.txt", 
        sSecretKey);
     // Decrypt the file.
     DecryptFile(@"C:'Encrypted.txt", 
        @"C:'Decrypted.txt", 
        sSecretKey);
     // Remove the Key from memory. 
     ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
     gch.Free();
  }
}
  }

您不能为每个文件设置密码以限制其打开。但是,您可以通过使用加密来保护文件内容。

查看加密&c#解密http://support.microsoft.com/kb/307010