2016-03-21 16 views
0

Doğrudan şifrelenmiş akışa yazmaya çalışıyorum ve dosyaya depolamıyorum.Bellek C'den şifrelenmiş dosyaya nasıl yazılır? C#

Aşağıda kodum var, ancak şifreyi çözdüğümde şifreleme yaptığım mesajı çöp kutusuna alıyorum.

Aşağıdaki kodda eksik olduğum kimsede yardımcı olan var mı? Bir char[] bekliyor ama bir byte[] geçiyoruz -

static void Main(string[] args) 
    { 
     string password = "pswd"; 
     string fileName = "test.txt"; 
     string msg = "Secret Message"; 
     FileEncryptionExample fe = new FileEncryptionExample(); 

     fe.EncryptFileExample(fileName, password, msg); 

     fe.DecryptFileExample(fileName, password); 

     Console.WriteLine("Press any key..."); 
     Console.ReadKey(); 
    } 
//------------------------------------------------------------------ 
public class FileEncryptionExample 
{ 
    public void DecryptFileExample(string fileName, string password) 
    { 


     byte[] salt = Encoding.ASCII.GetBytes(password.Length.ToString()); 

     using (FileStream fs = new FileStream(fileName, FileMode.Open)) 
     { 

      PasswordDeriveBytes secretKey = new PasswordDeriveBytes(password, salt); 

      RijndaelManaged rm = new RijndaelManaged(); 
      CryptoStream strm = new CryptoStream(fs, rm.CreateDecryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)), CryptoStreamMode.Read); 
      using (StreamReader sr = new StreamReader(fs)) 
      { 
       while (!sr.EndOfStream) 
       { 
        byte[] data = new byte[12]; 

        sr.Read(data, 0, 12); 

        Console.WriteLine(sr.ReadLine()); 
       } 
      } 

     } 

    } 


    public void EncryptFileExample(string fileName, string password, string text) 
    { 

     StreamWriter sw = new StreamWriter(fileName); 

     byte[] salt = Encoding.ASCII.GetBytes(password.Length.ToString()); 

     using (RijndaelManaged rm = new RijndaelManaged()) 
     { 
      PasswordDeriveBytes secretKey = new PasswordDeriveBytes(password, salt); 

      using (CryptoStream strm = new CryptoStream(sw.BaseStream, rm.CreateEncryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)), CryptoStreamMode.Write)) 
      { 
       //sw.WriteLine(text); 

       byte[] data = Encoding.ASCII.GetBytes(text); 
       strm.Write(data, 0, data.Length); 
      } 

     } 

    } 
} 
+1

Bu sizin için çalışıyor mu? Https://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged(v=vs.110).aspx? – Thomas

cevap

2
  1. Kodunuz olduğu gibi derlemek olmaz.
  2. fs, strm yerine StreamReader'a geçiyorsunuz.

Bunu kullanabilirsiniz:

public void DecryptFileExample(string fileName, string password) 
{ 
    byte[] salt = Encoding.ASCII.GetBytes(password.Length.ToString()); 

    using (FileStream fs = new FileStream(fileName, FileMode.Open)) 
    { 
     PasswordDeriveBytes secretKey = new PasswordDeriveBytes(password, salt); 

     RijndaelManaged rm = new RijndaelManaged(); 
     CryptoStream strm = new CryptoStream(fs, rm.CreateDecryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)), CryptoStreamMode.Read); 

     using (StreamReader srDecrypt = new StreamReader(strm)) 
     { 
      var str = srDecrypt.ReadToEnd(); 
      Console.WriteLine(str); 
     } 
    } 
} 

Ayrıca bir Bilginize olarak - senin tuz inanılmaz güvensiz olduğunu. Daha fazla bilgi için bkz. here.

İlgili konular