2012-10-11 4 views
-2

J'ai trouvé ce code en ligne Je veux savoir ce qui passe dans ce programme quelle est cette sortie et les chaînes d'entrée sont? Je passe l'entrée comme un nom de fichier et la sortie en tant que chemin mais c'est donner l'erreur.Cryptage de fichier C#

private void EncryptFile(string inputFile, string outputFile) 
{ 
    try 
    { 
     string password = @"myKey123"; // Your Key Here 
     UnicodeEncoding UE = new UnicodeEncoding(); 
     byte[] key = UE.GetBytes(password); 

     string cryptFile = outputFile; 
     FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create); 

     RijndaelManaged RMCrypto = new RijndaelManaged(); 

     CryptoStream cs = new CryptoStream(fsCrypt,RMCrypto.CreateEncryptor(key, key),CryptoStreamMode.Write); 

     FileStream fsIn = new FileStream(inputFile, FileMode.Open); 

     int data; 
     while ((data = fsIn.ReadByte()) != -1) 
      cs.WriteByte((byte)data); 

     fsIn.Close(); 
     cs.Close(); 
     fsCrypt.Close(); 
    } 
    catch 
    { 
     MessageBox.Show("Encryption failed!", "Error"); 
    } 
} 
+2

Quelle est l'erreur? –

+0

il est dit que le chiffrement a échoué! – SoftwareDeveloper

+0

... c'est parce que vous mangez l'exception. Supprimez le try-catch à des fins de débogage ou modifiez la clause catch pour intercepter toutes les exceptions ('catch (Exception ex)'), définissez un point d'arrêt et inspectez l'exception. – CodeCaster

Répondre

2

Le paramètre outputFile est pas un chemin mais le nom de fichier complet qu'il doit écrire. Un exemple moyen d'appeler ce code est:

EncryptFile(@"c:\temp\unencryptedfile.txt", @"c:\temp\encryptedfile.txt");

Sauf que, remplacer le code catch ce qui suit:

catch(Exception ex) { 
    MessageBox.Show(ex.Message); // will show the top exception 
    if (ex.InnerException != null) { 
    MessageBox.Show(ex.InnerException.Message); // will show additional details if present 
    } 
} 

remarque: si vous le savez, le code vous avez des fuites de mémoire. Vous souhaiterez peut-être étudier la clause using et rechercher les classes que vous utilisez implémentent IDisposable.

+0

Ouais Merci Chris qui fonctionne bien et encore une chose si je ne veux pas utiliser la touche dans mon programme. Puis-je simplement supprimer le mot de passe de la chaîne? – SoftwareDeveloper

+0

@SoftwareDeveloper: le cryptage nécessite une clé; vous ne pouvez pas enlever cela. – NotMe