Programm absturz bei Rijndael Decrypt

  • VB.NET

Es gibt 47 Antworten in diesem Thema. Der letzte Beitrag () ist von KenJy_L4F.

    Programm absturz bei Rijndael Decrypt

    Hallo ForumUser,

    habe ein Script im Netz gefunden um Text zu chiffrieren und dechiffrieren.
    Es funktioniert wunderbar.. auch in meiner abgeänderten Variante für mein eigenes Scrippt.
    Jedoch gibt es einen Fehler (auch im Original Scrippt) bei dem ich selber nicht weiß wie man ihn beheben kann.

    Deshalb hier das Original:
    man benötigt
    2 Buttons
    3 Textboxen

    in Textbox 2 wird der Schlüssel zum chiffrieren und dechiffrieren eingetragen

    VB.NET-Quellcode

    1. Imports System.Security.Cryptography
    2. Imports System.IO
    3. Imports System.Text
    4. Public Class Form1
    5. Inherits System.Windows.Forms.Form
    6. ' Encrypt using stream (binary)
    7. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    8. Dim rd As New RijndaelManaged
    9. Dim md5 As New MD5CryptoServiceProvider
    10. Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(TextBox2.Text))
    11. md5.Clear()
    12. rd.Key = key
    13. rd.GenerateIV()
    14. Dim iv() As Byte = rd.IV
    15. Dim ms As New MemoryStream
    16. ms.Write(iv, 0, iv.Length)
    17. Dim cs As New CryptoStream(ms, rd.CreateEncryptor, CryptoStreamMode.Write)
    18. Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes("abcdefghijk")
    19. cs.Write(data, 0, data.Length)
    20. cs.FlushFinalBlock()
    21. Dim encdata() As Byte = ms.ToArray()
    22. TextBox3.Text = Convert.ToBase64String(encdata)
    23. My.Settings.Data = Convert.ToBase64String(encdata)
    24. cs.Close()
    25. rd.Clear()
    26. TextBox1.Text = ""
    27. My.Settings.Save()
    28. End Sub
    29. ' Decrypt using stream (binary)
    30. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    31. Dim rd As New RijndaelManaged
    32. Dim rijndaelIvLength As Integer = 16
    33. Dim md5 As New MD5CryptoServiceProvider
    34. Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(TextBox2.Text))
    35. md5.Clear()
    36. Dim encdata() As Byte = Convert.FromBase64String(My.Settings.Data)
    37. Dim ms As New MemoryStream(encdata)
    38. Dim iv(15) As Byte
    39. ms.Read(iv, 0, rijndaelIvLength)
    40. rd.IV = iv
    41. rd.Key = key
    42. Dim cs As New CryptoStream(ms, rd.CreateDecryptor, CryptoStreamMode.Read)
    43. Dim data(ms.Length - rijndaelIvLength) As Byte
    44. Dim i As Integer = cs.Read(data, 0, data.Length)
    45. TextBox1.Text = System.Text.Encoding.UTF8.GetString(data, 0, i)
    46. cs.Close()
    47. rd.Clear()
    48. End Sub
    49. End Class


    Funktioniert einwandfrei! ABER chiffriert man den im scrippt vorgegeben String mit der TextBox2 zb mit "hallo" und dechiffriert ihn wieder aber nun trägt man in die Textbox2 irrtümlichweise nur "hall" ein, so wird das scrippt abgebrochen.. anstelle dessen wäre aber eine MsgBox sinnvoll und ein zurücksetzen der Textbox2 logisch.. jedoch wie verhindere ich diesen Abruch? Zustande kommt dieser Fehler weil die lenght des eingegeben Sclüssels nicht korrekt ist. Wie kann ich das aber verhindern? Bzw wenn das so geschieht einen vorzeitigen Abbruch bewirken bevor sich das Scrippt aufhängt??

    Grüße
    OttoVB
    In welcher Zeile kommt welcher Fehler?
    Oder muss ich die Krypto-DLL saugen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    danke für die schnellen Antworten.. ich würde gern auf Pico sein Argument eingehen.

    Das Chiffrieren funktioniert einwandfrei und soll/kann auch so bleiben!

    Der Fehler ist ja beim dechiffrieren. Beim Decrypt steht doch der Hash vor dem dechiffrieren.
    Oder wie meinst du? kannst du das im obigen scrippt mal veranschaulichen?
    Für mein scrippt müsste ich sowieso ein haufen ändern da es um eine reihe von settings und eingaben bzw ausgaben geht.

    grüße
    OttoVB
    Beispiel :)

    Bei falschem Passwort, kommt halt entweder Müll raus oder das Ganze crashed. Kommt auf die Verwendete Methode an. Wobei der Crash (die Exception) das bessere der beiden ist, da man diese dann gezielt abfangen kann.
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    RodFromGermany schrieb:

    In welcher Zeile kommt welcher Fehler?
    Oder muss ich die Krypto-DLL saugen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    3. Using rd As New RijndaelManaged
    4. Dim rijndaelIvLength As Integer = 16
    5. Using md5 As New MD5CryptoServiceProvider
    6. Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(TextBox2.Text))
    7. md5.Clear()
    8. Dim encdata() As Byte = Convert.FromBase64String(my.settings.data)
    9. Dim ms As New MemoryStream(encdata)
    10. Dim iv(15) As Byte
    11. ms.Read(iv, 0, rijndaelIvLength)
    12. rd.IV = iv
    13. rd.Key = key
    14. Dim cs As New CryptoStream(ms, rd.CreateDecryptor, CryptoStreamMode.Read)
    15. Dim data(ms.Length - rijndaelIvLength) As Byte
    16. Dim i As Integer = cs.Read(data, 0, data.Length)
    17. Try
    18. TextBox1.Text = System.Text.Encoding.UTF8.GetString(data, 0, i)
    19. cs.Close()
    20. Catch ex As System.Security.Cryptography.CryptographicException
    21. MsgBox("Wrong Passphrase!")
    22. Finally
    23. rd.Clear()
    24. End Try
    25. End Using
    26. End Using
    27. End Sub
    28. End Class


    Aber bei deinem Code gibts noch mehr Dinge, die verbessert werden können.
    z.B.: Statt dem direkten Zugriff auf die TextBoxen könnte man eine Funktion daraus machen.

    Ich hab dir den Link ja nicht zum abschreiben, sondern zum ansehen gepostet
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BiedermannS“ ()

    Danke dafür.

    Nun hab ihc mich an deinem Scrippt versucht, ist ja Grundlegend nichts anderes bis auf dieException Wightspace / Null Abfrage und wirklich der Teil der überprüft ob die strings die gleichen sind..
    Jedoch verstehe ich nicht,
    an welcher stelle ich nun den Text ins Scrippt bringe.. das Password aus der Textbox einführe und an welcher stelle ich die Ausgabe entnehmen soll... :S


    würde die zb den Textbox per:

    Dim textboxtex as sstring
    textboxtext = Textbox1.Text

    aber wo übergebe ich das?

    und wo is der Text der chiffriert werden soll ebenso der der dechiffrierft wurde..

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „OttoVB“ ()

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Microsoft.VisualBasic
    3. Imports System.Security.Cryptography
    4. Imports System.IO
    5. Imports System.Text
    6. Public Class Form1
    7. ' Encrypt using stream (binary)
    8. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    9. Dim EncryptedString as String = Crypto.Encrypt(TextBox1.Text,TextBox2.Text) 'Das verschlüsseln
    10. TextBox3.Text = EncryptedString
    11. My.Settings.Data = EncryptedString
    12. My.Settings.Save()
    13. End Sub
    14. ' Decrypt using stream (binary)
    15. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    16. TextBox1.Text = Crypto.Decrypt(TextBox3.Text, TextBox2.Text) 'das entschlüsseln
    17. End Sub
    18. End Class
    19. 'Klasse zum Ver- und Entschlüsseln
    20. Public Class Crypto
    21. Public Shared Function Encrypt(ByVal Text As String, ByVal Password As String) As String
    22. 'Löst eine Exception aus wenn der eingegebene Text bzw das Passwort leer ist oder aus nur Whitespaces besteht
    23. If IsNullOrWhiteSpace(Text) Then
    24. If IsNothing(Text) Then
    25. Throw New ArgumentNullException("Text")
    26. Else
    27. Throw New ArgumentException("Argument cannot be empty or whitespace.", "Text")
    28. End If
    29. Exit Function
    30. End If
    31. If IsNullOrWhiteSpace(Password) Then
    32. If IsNothing(Password) Then
    33. Throw New ArgumentNullException("Password")
    34. Else
    35. Throw New ArgumentException("Argument cannot be empty or whitespace.", "Password")
    36. End If
    37. Exit Function
    38. End If
    39. Dim encdata() As Byte 'Hier wird der verschlüsselte Text gespeichert
    40. Using rd As New RijndaelManaged 'Stellt den Rijndael-Algorihmus zur Verfügung
    41. Using md5 As New MD5CryptoServiceProvider 'Dient zum berechnen eines MD5-Hashes
    42. Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(Password)) 'Das Passwort wird in ein Byte-Array zerlegt gehasht und dann im Array Key gespeichert
    43. md5.Clear() 'Leert den MD5CryptoProvider
    44. rd.Key = key 'Speichert den Key für die Verwendung mit dem Rijndael-Algorithmus
    45. rd.GenerateIV() 'Hier wird der Initialisierungsvektor berechnet, der für de Verschlüsselung benötigt wird
    46. Dim ms As New MemoryStream 'Hier wird ein neuer MemoryStream erstellt
    47. ms.Write(rd.IV, 0, rd.IV.Length) 'und der Initialisierungsvektor hineingeschrieben (die ersten 16 Byte)
    48. Using cs As New CryptoStream(ms, rd.CreateEncryptor, CryptoStreamMode.Write) 'Nun wird ein neuer Cryptostream aus rd erstellt, welcher in den MemoryStream schreibt
    49. Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes(Text) 'Der Text wird auch in ein Bytearray zerlegt
    50. cs.Write(data, 0, data.Length) 'und in den CryptoStream geschrieben
    51. cs.FlushFinalBlock() 'Garantiert, dass der schreibvorgang abgeschlossen wird
    52. encdata = ms.ToArray() 'Hier wird der zugrundeliegende MemoryStream in ein ByteArray geschrieben
    53. cs.Close() 'Schließen und leeren der nicht mehr gebrauchten Instanzen
    54. rd.Clear()
    55. End Using
    56. End Using
    57. End Using
    58. Return Convert.ToBase64String(encdata) 'Nun wird der Base64 String der Daten zurück gegeben
    59. End Function
    60. Public Shared Function Decrypt(ByVal Text As String, ByVal Password As String) As String
    61. 'Löst eine Exception aus wenn der eingegebene Text bzw das Passwort leer ist oder aus nur Whitespaces besteht
    62. If IsNullOrWhiteSpace(Text) Then
    63. If IsNothing(Text) Then
    64. Throw New ArgumentNullException("Text")
    65. Else
    66. Throw New ArgumentException("Argument cannot be empty or whitespace!", "Text")
    67. End If
    68. Exit Function
    69. End If
    70. If IsNullOrWhiteSpace(Password) Then
    71. If IsNothing(Password) Then
    72. Throw New ArgumentNullException("Password")
    73. Else
    74. Throw New ArgumentException("Argument cannot be empty or whitespace!", "Password")
    75. End If
    76. Exit Function
    77. End If
    78. Dim data() As Byte 'Hier wird der entschlüsselte Text gespeichert
    79. Dim i As Integer
    80. Using rd As New RijndaelManaged 'Stellt den Rijndael-Algorihmus zur Verfügung
    81. Dim rijndaelIvLength As Integer = 16 'Die Anzahl der Bytes des Initialisierungsvektor
    82. Using md5 As New MD5CryptoServiceProvider 'Dient zum berechnen eines MD5-Hashes
    83. Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(Password)) 'Das Passwort wird in ein Byte-Array zerlegt gehasht und dann im Array Key gespeichert
    84. md5.Clear() 'Leert den MD5CryptoProvider
    85. Dim encdata() As Byte = Convert.FromBase64String(Text) 'Wandelt den Base64-String des verschlüsselten Textes in ein Byte Array und speichert dies in encdata
    86. Using ms As New MemoryStream(encdata) 'Öffnet das ByteArray in einem MemoryStream
    87. Dim iv(15) As Byte
    88. ms.Read(iv, 0, rijndaelIvLength) 'Hier wird der Initialisierungsvektor aus dem Memorystream gelesen (die ersten 16 Byte, siehe Verschlüsselung)
    89. rd.IV = iv
    90. rd.Key = key 'Hier wird der Key für die weitere Verwendung in der aktuellen Instanz von RijndaelManaged gespeichert
    91. Dim cs As New CryptoStream(ms, rd.CreateDecryptor, CryptoStreamMode.Read) 'Nun wird ein neuer Cryptostream aus rd erstellt, welcher aus dem MemoryStream liest
    92. ReDim data(Convert.ToInt32(ms.Length) - Convert.ToInt32(rijndaelIvLength)) 'Hier wird die Größe des Byte Arrays für den entschlüsselten Text festgelegt und dieses neu dimensioniert
    93. Try
    94. i = cs.Read(data, 0, data.Length) 'Hier wird der Klartext ausgelesen
    95. cs.Close() 'Schließen und leeren der nicht mehr gebrauchten Instanzen
    96. Catch ex As System.Security.Cryptography.CryptographicException
    97. MsgBox("Wrong Passphrase!")
    98. Finally
    99. rd.Clear()
    100. End Try
    101. End Using
    102. End Using
    103. End Using
    104. Return System.Text.Encoding.UTF8.GetString(data, 0, i) 'Zum Schluss wird das Byte Array zu einem String umgewandelt
    105. End Function
    106. Private Shared Function IsNullOrWhiteSpace(ByVal s As String) As Boolean
    107. Dim retval As Boolean = True
    108. If Not String.IsNullOrEmpty(s) Then
    109. For Each c As Char In s
    110. If Not Char.IsWhiteSpace(c) Then
    111. retval = False
    112. End If
    113. Next
    114. End If
    115. Return retval
    116. End Function
    117. End Class


    P.S.: Das ist vb.net und kein Script. :)
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    Danke,

    habe es jetzt mal ausprobiert..
    Funktioniert in der Konstelation. Jedoch hab ich noch ne Frage zu den Exceptions in der Whitespace / kein Text abfrage:

    was macht jeweils das If in der unteren schleife (else verstehe ich)?

    Ich möchte anstelle der Argument Exception lieber eine Normale MsgBox mit der Fehlermeldung erhalten, wie kann ich das lösen?
    folgendes is nicht des Rätsels lösung.. dazu erstell ich vor der Exception nur eine MsgBox :thumbdown:

    VB.NET-Quellcode

    1. If IsNullOrWhiteSpace(Text) Then
    2. If IsNothing(Text) Then
    3. Throw New ArgumentNullException(CStr(MsgBox("Wrong Text!")))
    4. Else
    5. Throw New ArgumentException(CStr(MsgBox("Wrong Text!")))
    6. End If
    7. Exit Function
    8. End If
    Er wirft verschiedene Exceptions, je nach dem, ob der Text "" oder " " ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja macht sinn aber ich verstehe den Unterschied nicht.. da für beide Ausnahmen der gleiche Fehler angezeigt wird.

    Aber was mich eher interessiert, kann ich anstelle der Exceptions und dessen aufgerufener AusnahmeForm eine eigene MsgBox verwenden, in der die Ausnahme formuliuert wird??? Mich stört nämlich beim auftreten des Fehlers diese hässliche msgbox der Exception und das man da weiter und abbruch drücken kann.. möchte lieber nur ein Ok haben, und Text darüber was passiert ist und nicht das gedöhns das überhaut ein Fehler aufgetreten ist und das Programm gestoppt oder fortgesetzt werden kann.. das Programm soll weiter laufen wenn der Fehler aufgetreten ist. Ich möchte das Programm nämlich wieder zurücksetzen in dem die Textbox mit dem Fehler geleert wird und eine erneute eingabe nötig ist.
    Ich seh gerade:

    OttoVB schrieb:

    VB.NET-Quellcode

    1. Throw New ArgumentNullException(CStr(MsgBox("Wrong Text!")))
    Welcher Depp hat da als Argument der Exception eine MessageBox reingeschrieben?
    Entweder

    VB.NET-Quellcode

    1. MsgBox("Wrong Text!")
    2. Return False
    oder

    VB.NET-Quellcode

    1. Throw New ArgumentNullException("Wrong Text!")
    Nicht beides.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    OttoVB schrieb:

    Ich möchte das Programm nämlich wieder zurücksetzen in dem die Textbox mit dem Fehler geleert wird und eine erneute eingabe nötig ist.


    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Microsoft.VisualBasic
    3. Imports System.Security.Cryptography
    4. Imports System.IO
    5. Imports System.Text
    6. Public Class Form1
    7. ' Encrypt using stream (binary)
    8. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    9. Dim EncryptedString as String = Crypto.Encrypt(TextBox1.Text,TextBox2.Text) 'Das verschlüsseln
    10. TextBox3.Text = EncryptedString
    11. My.Settings.Data = EncryptedString
    12. My.Settings.Save()
    13. End Sub
    14. ' Decrypt using stream (binary)
    15. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    16. Try
    17. TextBox1.Text = Crypto.Decrypt(TextBox3.Text, TextBox2.Text) 'das entschlüsseln
    18. catch ex as System.Security.Cryptography.CryptographicException
    19. Msgbox(ex.message)
    20. textbox2.text = string.empty
    21. end try
    22. End Sub
    23. End Class
    24. 'Klasse zum Ver- und Entschlüsseln
    25. Public Class Crypto
    26. Public Shared Function Encrypt(ByVal Text As String, ByVal Password As String) As String
    27. 'Löst eine Exception aus wenn der eingegebene Text bzw das Passwort leer ist oder aus nur Whitespaces besteht
    28. If IsNullOrWhiteSpace(Text) Then
    29. If IsNothing(Text) Then
    30. Throw New ArgumentNullException("Text")
    31. Else
    32. Throw New ArgumentException("Argument cannot be empty or whitespace.", "Text")
    33. End If
    34. Exit Function
    35. End If
    36. If IsNullOrWhiteSpace(Password) Then
    37. If IsNothing(Password) Then
    38. Throw New ArgumentNullException("Password")
    39. Else
    40. Throw New ArgumentException("Argument cannot be empty or whitespace.", "Password")
    41. End If
    42. Exit Function
    43. End If
    44. Dim encdata() As Byte 'Hier wird der verschlüsselte Text gespeichert
    45. Using rd As New RijndaelManaged 'Stellt den Rijndael-Algorihmus zur Verfügung
    46. Using md5 As New MD5CryptoServiceProvider 'Dient zum berechnen eines MD5-Hashes
    47. Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(Password)) 'Das Passwort wird in ein Byte-Array zerlegt gehasht und dann im Array Key gespeichert
    48. md5.Clear() 'Leert den MD5CryptoProvider
    49. rd.Key = key 'Speichert den Key für die Verwendung mit dem Rijndael-Algorithmus
    50. rd.GenerateIV() 'Hier wird der Initialisierungsvektor berechnet, der für de Verschlüsselung benötigt wird
    51. Dim ms As New MemoryStream 'Hier wird ein neuer MemoryStream erstellt
    52. ms.Write(rd.IV, 0, rd.IV.Length) 'und der Initialisierungsvektor hineingeschrieben (die ersten 16 Byte)
    53. Using cs As New CryptoStream(ms, rd.CreateEncryptor, CryptoStreamMode.Write) 'Nun wird ein neuer Cryptostream aus rd erstellt, welcher in den MemoryStream schreibt
    54. Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes(Text) 'Der Text wird auch in ein Bytearray zerlegt
    55. cs.Write(data, 0, data.Length) 'und in den CryptoStream geschrieben
    56. cs.FlushFinalBlock() 'Garantiert, dass der schreibvorgang abgeschlossen wird
    57. encdata = ms.ToArray() 'Hier wird der zugrundeliegende MemoryStream in ein ByteArray geschrieben
    58. cs.Close() 'Schließen und leeren der nicht mehr gebrauchten Instanzen
    59. rd.Clear()
    60. End Using
    61. End Using
    62. End Using
    63. Return Convert.ToBase64String(encdata) 'Nun wird der Base64 String der Daten zurück gegeben
    64. End Function
    65. Public Shared Function Decrypt(ByVal Text As String, ByVal Password As String) As String
    66. 'Löst eine Exception aus wenn der eingegebene Text bzw das Passwort leer ist oder aus nur Whitespaces besteht
    67. If IsNullOrWhiteSpace(Text) Then
    68. If IsNothing(Text) Then
    69. Throw New ArgumentNullException("Text")
    70. Else
    71. Throw New ArgumentException("Argument cannot be empty or whitespace!", "Text")
    72. End If
    73. Exit Function
    74. End If
    75. If IsNullOrWhiteSpace(Password) Then
    76. If IsNothing(Password) Then
    77. Throw New ArgumentNullException("Password")
    78. Else
    79. Throw New ArgumentException("Argument cannot be empty or whitespace!", "Password")
    80. End If
    81. Exit Function
    82. End If
    83. Dim data() As Byte 'Hier wird der entschlüsselte Text gespeichert
    84. Dim i As Integer
    85. Using rd As New RijndaelManaged 'Stellt den Rijndael-Algorihmus zur Verfügung
    86. Dim rijndaelIvLength As Integer = 16 'Die Anzahl der Bytes des Initialisierungsvektor
    87. Using md5 As New MD5CryptoServiceProvider 'Dient zum berechnen eines MD5-Hashes
    88. Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(Password)) 'Das Passwort wird in ein Byte-Array zerlegt gehasht und dann im Array Key gespeichert
    89. md5.Clear() 'Leert den MD5CryptoProvider
    90. Dim encdata() As Byte = Convert.FromBase64String(Text) 'Wandelt den Base64-String des verschlüsselten Textes in ein Byte Array und speichert dies in encdata
    91. Using ms As New MemoryStream(encdata) 'Öffnet das ByteArray in einem MemoryStream
    92. Dim iv(15) As Byte
    93. ms.Read(iv, 0, rijndaelIvLength) 'Hier wird der Initialisierungsvektor aus dem Memorystream gelesen (die ersten 16 Byte, siehe Verschlüsselung)
    94. rd.IV = iv
    95. rd.Key = key 'Hier wird der Key für die weitere Verwendung in der aktuellen Instanz von RijndaelManaged gespeichert
    96. Dim cs As New CryptoStream(ms, rd.CreateDecryptor, CryptoStreamMode.Read) 'Nun wird ein neuer Cryptostream aus rd erstellt, welcher aus dem MemoryStream liest
    97. ReDim data(Convert.ToInt32(ms.Length) - Convert.ToInt32(rijndaelIvLength)) 'Hier wird die Größe des Byte Arrays für den entschlüsselten Text festgelegt und dieses neu dimensioniert
    98. Try
    99. i = cs.Read(data, 0, data.Length) 'Hier wird der Klartext ausgelesen
    100. cs.Close() 'Schließen und leeren der nicht mehr gebrauchten Instanzen
    101. Catch ex As System.Security.Cryptography.CryptographicException
    102. Throw New System.Security.Cryptography.CryptographicException("Wrong Passphrase!")
    103. Finally
    104. rd.Clear()
    105. End Try
    106. End Using
    107. End Using
    108. End Using
    109. Return System.Text.Encoding.UTF8.GetString(data, 0, i) 'Zum Schluss wird das Byte Array zu einem String umgewandelt
    110. End Function
    111. Private Shared Function IsNullOrWhiteSpace(ByVal s As String) As Boolean
    112. Dim retval As Boolean = True
    113. If Not String.IsNullOrEmpty(s) Then
    114. For Each c As Char In s
    115. If Not Char.IsWhiteSpace(c) Then
    116. retval = False
    117. End If
    118. Next
    119. End If
    120. Return retval
    121. End Function
    122. End Class
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    hey leute,

    nein soweit bin ich auch schon gekommen,

    es geht nicht um die Passphrase abfrage ( um die auch) aber eigentlich meinte ich den Speicher Prozess der Eingabe, sorry wenn ihch das nich deutlich ausgedrückt habe. Ich meine die Exception Nachrichten vom Programm beim Schreiben der Settings. Quasi wenn ich die Eingabe mache und der Text der Textbox1.Text oder der Text der Textbox2.Text (Passwort) nicht richtig ist also nichts oder leerzeichen enthält. Dann soll anstelle der Exception eine Textbox erscheinen anstelle der ExceptionForm mit der man Abbruch oder Scrippt Fortführen wählen kann.. an der etappe scheitert es.. ich komme mit der NullorWhitespace abfrage iwie nicht zurecht. :rolleyes:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Try
    3. TextBox1.Text = Crypto.Decrypt(TextBox3.Text, TextBox2.Text) 'das entschlüsseln
    4. catch ex as System.Security.Cryptography.CryptographicException
    5. Msgbox(ex.message)
    6. textbox2.text = string.empty
    7. end try
    8. End Sub


    Das Try bewirkt, das alles was zwischen try un catch auf ausnahmen überwacht wird. Tritt eine Ausnahme auf, so wird der code zwischen catch und end try ausgeführt.

    Hier ein guter Artikel zum Thema Exceptions: codeproject.com/Articles/9538/…ing-Best-Practices-in-NET
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BiedermannS“ ()