Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

  • Autor

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.

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

  • Autor

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.