2009-04-11 8 views
4

Un peu complémentaire à, mais pas la même chose que, this question.Comment créer un fichier protégé par mot de passe en C#

Comment créer un fichier protégé par mot de passe?

+0

Vous devriez vraiment dire exactement ce que vous voulez dire quand vous dites, "Mot de passe fichier protégé". Vous voulez dire quand quelqu'un tente de l'ouvrir, une boîte de dialogue "Entrer le mot de passe" apparaît, ou quoi? –

+0

oui, c'est bien ce que je veux dire – Peter

Répondre

9

Crypter:

private const int SaltSize = 8; 

public static void Encrypt(FileInfo targetFile, string password) 
{ 
    var keyGenerator = new Rfc2898DeriveBytes(password, SaltSize); 
    var rijndael = Rijndael.Create(); 

    // BlockSize, KeySize in bit --> divide by 8 
    rijndael.IV = keyGenerator.GetBytes(rijndael.BlockSize/8); 
    rijndael.Key = keyGenerator.GetBytes(rijndael.KeySize/8); 

    using(var fileStream = targetFile.Create()) 
    { 
    // write random salt 
    fileStream.Write(keyGenerator.Salt, 0, SaltSize); 

    using(var cryptoStream = new CryptoStream(fileStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write)) 
    { 
     // write data 
    } 
    } 
} 

et décrypter:

public static void Decrypt(FileInfo sourceFile, string password) 
{ 
    // read salt 
    var fileStream = sourceFile.OpenRead(); 
    var salt = new byte[SaltSize]; 
    fileStream.Read(salt, 0, SaltSize); 

    // initialize algorithm with salt 
    var keyGenerator = new Rfc2898DeriveBytes(password, salt); 
    var rijndael = Rijndael.Create(); 
    rijndael.IV = keyGenerator.GetBytes(rijndael.BlockSize/8); 
    rijndael.Key = keyGenerator.GetBytes(rijndael.KeySize/8); 

    // decrypt 
    using(var cryptoStream = new CryptoStream(fileStream, rijndael.CreateDecryptor(), CryptoStreamMode.Read)) 
    { 
    // read data 
    } 
} 
+0

Quel objet utiliser pour écrire et lire des données? – writeToBhuwan

+0

Si vous utilisez CryptoStream pour les communications réseau, vous devez trouver un chiffrement de flux. Rijndael est généralement utilisé comme un chiffrement de bloc. Un chiffrement de flux est optimal pour les petites données, ce qui est typique sur les flux réseau bavards. Les chiffrements de flux peuvent être plus sûrs que les chiffrements par blocs, en particulier lorsque le flux de données n'est pas bloqué. Le rembourrage et le chaînage sont requis pour les chiffrements par bloc. Les chiffreurs de flux peuvent passer plus de temps à calculer la clé psuedorandom, puis utiliser XOR très efficace pour l'opération de chiffrement/décryptage ondemand. – Todd

2

Utilisez la classe RijndaelManaged pour le chiffrement et Rfc2898DeriveBytes pour générer la clé (et IV) pour le chiffrement.

Questions connexes