0

我有一个名为 Sample 的文件。它可以是任何类型(.txt/.doc/.docx/.pdf/....)。现在我想为该文件设置密码。如果可能的话,请帮助我编写代码。

4

2 回答 2

0

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

请参阅此链接以了解 C# 中的加密和解密http://support.microsoft.com/kb/307010

于 2013-04-10T06:49:54.480 回答
0

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

来自 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();
  }
}
  }
于 2013-04-10T06:46:19.720 回答