Gateway_man Geschrieben 9. September 2009 Geschrieben 9. September 2009 (bearbeitet) hi leute, hab mir ein verständnisproblem bei der Verschlüsselung eines Strings. So wie ich das sehe, wird der Verschlüsselungskey hier nach Zufallsprinzip ausgewählt und kann daher auch nur in ein und demselben programmaufrufen entschlüsseln. Ich will jedoch passwörter verschlüsseln und diese immer wieder entschlüsseln lassen. Wie kann ich also einen Key schreiben, damit ich das passwort auch bei einem Neuaufruf des Programms wieder problemlos entschlüsseln lassen kann? Hab zwar schon angeschaut aber wirklich verstanden hab ichs nicht. Sub Main() Try ' Create a new Rijndael object to generate a key ' and initialization vector (IV). Dim RijndaelAlg As Rijndael = Rijndael.Create ' Create a string to encrypt. Dim sData As String = "Here is some data to encrypt." Dim FileName As String = "CText.txt" ' Encrypt text to a file using the file name, key, and IV. EncryptTextToFile(sData, FileName, RijndaelAlg.Key, RijndaelAlg.IV) ' Decrypt the text from a file using the file name, key, and IV. Dim Final As String = DecryptTextFromFile(FileName, RijndaelAlg.Key, RijndaelAlg.IV) ' Display the decrypted string to the console. Catch e As Exception End Try End Sub Sub EncryptTextToFile(ByVal Data As String, ByVal FileName As String, ByVal Key() As Byte, ByVal IV() As Byte) Try ' Create or open the specified file. Dim fStream As FileStream = File.Open(FileName, FileMode.OpenOrCreate) ' Create a new Rijndael object. Dim RijndaelAlg As Rijndael = Rijndael.Create ' Create a CryptoStream using the FileStream ' and the passed key and initialization vector (IV). Dim cStream As New CryptoStream(fStream, _ RijndaelAlg.CreateEncryptor(Key, IV), _ CryptoStreamMode.Write) ' Create a StreamWriter using the CryptoStream. Dim sWriter As New StreamWriter(cStream) Try ' Write the data to the stream ' to encrypt it. sWriter.WriteLine(Data) Catch e As Exception Console.WriteLine("An error occurred: {0}", e.Message) Finally ' Close the streams and ' close the file. sWriter.Close() cStream.Close() fStream.Close() End Try Catch e As CryptographicException Console.WriteLine("A Cryptographic error occurred: {0}", e.Message) Catch e As UnauthorizedAccessException Console.WriteLine("A file error occurred: {0}", e.Message) End Try End Sub Function DecryptTextFromFile(ByVal FileName As String, ByVal Key() As Byte, ByVal IV() As Byte) As String Try ' Create or open the specified file. Dim fStream As FileStream = File.Open(FileName, FileMode.OpenOrCreate) ' Create a new Rijndael object. Dim RijndaelAlg As Rijndael = Rijndael.Create ' Create a CryptoStream using the FileStream ' and the passed key and initialization vector (IV). Dim cStream As New CryptoStream(fStream, _ RijndaelAlg.CreateDecryptor(Key, IV), _ CryptoStreamMode.Read) ' Create a StreamReader using the CryptoStream. Dim sReader As New StreamReader(cStream) ' Read the data from the stream ' to decrypt it. Dim val As String = Nothing Try val = sReader.ReadLine() Catch e As Exception Console.WriteLine("An Cerror occurred: {0}", e.Message) Finally ' Close the streams and ' close the file. sReader.Close() cStream.Close() fStream.Close() End Try ' Return the string. Return val Catch e As CryptographicException Console.WriteLine("A Cryptographic error occurred: {0}", e.Message) Return Nothing Catch e As UnauthorizedAccessException Console.WriteLine("A file error occurred: {0}", e.Message) Return Nothing End Try End Function lg Gateway Bearbeitet 9. September 2009 von Gateway_man Zitieren
Guybrush Threepwood Geschrieben 9. September 2009 Geschrieben 9. September 2009 Na indem du dir den Schlüssel halt irgendwo merkst. Aber warum sollte man Passwörter verschlüsseln wollen?:confused: Zitieren
Gateway_man Geschrieben 9. September 2009 Autor Geschrieben 9. September 2009 Das Passwort wird benötigt um das Programm zu starten. Nun finde ich es enorm sicherheitskritisch das passwort als Plaintext in ner cofig datei zu haben...... Ja ich will ja nur wissen wie ich den key für dieses Verschlüsselungsverfahren schreibe. Alle beispiele die ich gesehn habe sahen in etwa so aus: Dim key() as byte Warum wird dafür ein Byte-Array benötigt. Ich verstehe unter einem Key einfach eine Zeichenkette und deshalb bin ich verwirrt und frage, wie ich den key für o. g. verfahren erstelle. Zitieren
Maulwurf_der_Schlaue Geschrieben 9. September 2009 Geschrieben 9. September 2009 (bearbeitet) Hallo Gateway_man, also ich muss gestehen ich hab mir den Quellcode oben nur überflogen. Ich sehe das so: Du gibts ein Kennwort ein z.B. "kennwort" und das Skript ermittelt Dir einen Schlüssel z.B. "123kdj3j2" diesen speicherst Du in deine Datei. Wenn Du jetzt die Funktion nochmal aufrufst müsst doch für die Eingabe "kennwort" wieder "123kdj3j2" als Ergbnis ausgegeben werden. Somit kannst Du doch einfach das verschlüsselte Kennwort in deine Datei schreiben und mit dem vergleichen was bei der Anmeldemaske zurückgeliefert wurde. Kann natürlich sein das ich total auf dem Holzweg bin. Wenn es aber jedesmal einen anderen Schlüssel erzeugt, was willst Du dann speichern? Du kannst es ja mit nichts vergleichen. [Nachtrag] Hatte ein ähnliches Ziel und habe sowas in Access mit einem MD5-Modul realisiert. So steht in der Datenbank das Kennwort als MD5-Wert und aus der Eingabe des Benutzers wird immer als MD5-Wert ermittelt und mit dem der Datenbank verglichen. Natürlich ist das Eingabe- feld auch mit "****" verschlüsselt . Somit ist das Kennwort nicht einfach so zu lesen. (nur ein Beispiel wie man das Kennwort ohne Rijndael unleserlich speichern kann.) Bearbeitet 9. September 2009 von Maulwurf_der_Schlaue Zitieren
Gateway_man Geschrieben 9. September 2009 Autor Geschrieben 9. September 2009 (bearbeitet) Das Problem bei dem Code ist nur, das ich das Passwort niewieder entschlüsseln kann, Da der key mit dem das verschlüsselungsverfahren den passwort string verschlüsselt momentan per zufallsprinzip gewählt wird und die warscheinlich geschwindent gering ist, das beim nächsten programmaufruf der gleiche key generiert wird und somit das Passwort aus der Datei nicht mehr ermittelt werden kann. Deswegen frage ich ja wie ich den key für das Rijndael verfahren festlegen kann sowie den IV Vektor. lg und thx Gateway Bearbeitet 9. September 2009 von Gateway_man Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.