mit Rijndael und Cryptostream richtig entschlüsseln
-
if(schlDateiNeu == true) { generateAES(passwd); generateRSA(); FileStream fsschl = new FileStream(schlDatei.FullName, FileMode.Create, FileAccess.ReadWrite, FileShare.None); byte[] b = new byte[1]; b[0] = Convert.ToByte(salt.Length); fsschl.Write(b, 0, b.Length); b = ASCIIEncoding.ASCII.GetBytes(salt); fsschl.Write(b, 0, b.Length); b = new byte[symCrypt.IV.Length]; fsschl.Write(b,0,b.Length); ICryptoTransform transform = symCrypt.CreateEncryptor(); CryptoStream cryptStream = new CryptoStream(fsschl, transform,CryptoStreamMode.Write); b = ASCIIEncoding.ASCII.GetBytes(asymCrypt.ToXmlString(true)); cryptStream.Write(b,0,b.Length); cryptStream.FlushFinalBlock(); fsschl.Close(); } else { FileStream fsschl = new FileStream(schlDatei.FullName, FileMode.Open, FileAccess.ReadWrite, FileShare.None); symCrypt = new RijndaelManaged(); byte[] b = new byte[1]; fsschl.Read(b, 0, b.Length); b = new byte[Convert.ToInt32(b[0])]; fsschl.Read(b,0,b.Length); salt = ASCIIEncoding.ASCII.GetString(b); b = new byte[16]; fsschl.Read(b,0,b.Length); symCrypt.IV = b; String saltedPass = ""; for(int i = 0, j = 0; i < passwd.Length || j < salt.Length; i++, j++) { if(i < passwd.Length) saltedPass = saltedPass + passwd.ToCharArray()[i]; if(j < salt.Length) saltedPass = saltedPass + salt.ToCharArray()[j]; } symCrypt.Key = ASCIIEncoding.ASCII.GetBytes(saltedPass); ICryptoTransform transform = symCrypt.CreateDecryptor(); CryptoStream cryptStream = new CryptoStream(fsschl, transform, CryptoStreamMode.Read); String temp = ""; b = new byte[schlDatei.Length - fsschl.Position]; try { cryptStream.Read(b,0,b.Length); temp = ASCIIEncoding.ASCII.GetString(b, 0, b.Length); } catch(Exception ex) { System.Console.Out.WriteLine(ex); } fsschl.Close();
symCrypt ist eine Instanz von RijndaelManaged und asymCrypt von RSACryptoServiceProvider, dessen Daten ich verschlüsseln will. Die erste Hälfte der if-Schleife verschlüsselt die Daten, die 2. entschlüsselt sie.
Das Passwort wird mit einem zufälligen Salt verschlüsselt. Das Abspeichern geht folgendermaßen vor sich: [Länge des Salt][Salt][Rijndael.IV][Daten]
Es klappt auch (fast) alles und ich bekomme auch einen Großteil meiner verschlüsselten Daten wieder, allerdings ist der Anfang des entschlüsselten Textes immer nur Mist (10-15 Zeichen Buchstabensalat)
Wenn irgendjemand eine Idee hat, wäre ich sehr froh (hänge da jetzt schon 6 Stunden dran).
Azraelgod