CryptographicException bei Encryption mit Rijndael/Aes

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    CryptographicException bei Encryption mit Rijndael/Aes

    Hallo.

    Ich habe hier ein Problem mit der System.Security.Cryptography.RijndaelManaged bzw. AesManaged.
    Und zwar kommt eine CryptographicException mit der Message "Zeichenabstände sind ungültig und können nicht entfernt werden.", beim Schließen des entschlüsselnden CryptoStreams.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim Input As Byte() = System.Text.Encoding.Default.GetBytes(TextBox_Input.Text)
    3. Dim Crypted As Byte()
    4. Dim Output As Byte()
    5. Dim pdb As New System.Security.Cryptography.Rfc2898DeriveBytes(TextBox_Password.Text, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, &H65, &H64, &H76, &H65, &H64, &H65, &H76})
    6. Dim TempKey As Byte() = pdb.GetBytes(32)
    7. Dim TempIV As Byte() = pdb.GetBytes(16)
    8. Using Rijndael As New System.Security.Cryptography.RijndaelManaged With {.Key = TempKey, .IV = TempIV, .Mode = System.Security.Cryptography.CipherMode.CBC}
    9. Dim msEn As New System.IO.MemoryStream
    10. Dim csEn As New System.Security.Cryptography.CryptoStream(msEn, Rijndael.CreateEncryptor(TempKey, TempIV), Security.Cryptography.CryptoStreamMode.Write)
    11. csEn.Write(Input, 0, Input.Length)
    12. Crypted = msEn.ToArray
    13. csEn.Close()
    14. msEn.Close()
    15. Dim msDe As New System.IO.MemoryStream
    16. Dim csDe As New System.Security.Cryptography.CryptoStream(msDe, Rijndael.CreateDecryptor(TempKey, TempIV), Security.Cryptography.CryptoStreamMode.Write)
    17. csDe.Write(Crypted, 0, Crypted.Length)
    18. Output = msDe.ToArray
    19. csDe.Close() 'Hier die Exception
    20. msDe.Close()
    21. End Using
    22. TextBox_Output.Text = System.Text.Encoding.Default.GetString(Output)
    23. End Sub


    Bei MSDN stand, dass eine mögliche Ursache sein könnte, dass der Key oder der IV beim Verschlüsseln ein anderer ist, als beim Entschlüsseln.
    Aber das kann nicht sein, da hier beides mal das gleiche verwendet wird.

    In diversen Foren kommen alle möglichen Wrapper, die alle das selbe machen, wie der Code hier.

    Ich finde auch, dass das alles extrem umständlich gemacht wurde. Warum nicht einfach:

    VB.NET-Quellcode

    1. System.Security.Cryptography.RijndaelManaged.Encrypt(Input, Password) 'Optional mit einer Angabe für System.Security.Cryptography.CipherMode



    Hat jemand Ideen, woran der Fehler liegen könnte?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    jo, am Algorythmus.

    Ryjandel kann nur entschlüsseln, was auch damit verschlüsselt wurde.

    Dassis eiglich unlogisch, denn man sollte erwarten, dass jeder Mist entschlüsselbar ist - nur dass dann Mist^2 bei rauskommt.
    Aber nein: Viele viele Eingaben (ausser der richtigen, und ein paar anneren, die richtig sein könnten) bringen diesen Algo zum crashen.

    Also ich hab jetzt deinen Code nicht durchblickt - ob du da vlt. eine richtige Eingabe in die Entschlüsselung gibst - nur halt die Info: bei Rijandel-Entschlüsselung gibts jede menge Eingaben, die, anstatt ein unbrauchbares Entschlüsselungsergebnis zu bringen, einfach crashen.

    Edit: vlt. kannste mit meinen Klassen Crypter (v.a. Variante 2) und AesStream ja was anfangen: PasswordHandling

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