2013-04-10 130 views
0

我有一個名爲Sample的FILE。它可以是任何類型(.txt/.doc/.docx/.pdf/....)。現在我想爲該文件設置密碼。如果可以的話,只需要幫助我的代碼。如何保護文件?

+0

歡迎#1,你有沒有試過_anything_這麼遠嗎?先顯示你的努力..請閱讀[常見問題]和[問]也.. – 2013-04-10 06:43:09

+6

http://stackoverflow.com/questions/740837/how-to-create-a-password-protected-file-in-c-sharp – 2013-04-10 06:45:28

回答

0

您可以使用自己的passwort或生成的密鑰加密文件(見documentation)從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(); 
    } 
} 
    } 
0

你不能設置在每一個文件的密碼,以限制它從開幕。但是,您可以使用加密來保護文件內容。

見C#這個鏈接進行加密解密& http://support.microsoft.com/kb/307010