Zum Inhalt springen

Rijndael Verschlüsselung in vb.net


Empfohlene Beiträge

Geschrieben (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 von Gateway_man
Geschrieben

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.

Geschrieben (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 :D. Somit ist das Kennwort nicht einfach so zu lesen.

(nur ein Beispiel wie man das Kennwort ohne Rijndael unleserlich speichern kann.)

Bearbeitet von Maulwurf_der_Schlaue
Geschrieben (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 von Gateway_man

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...