Rijndael und UTF8

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von 112marv.

    Rijndael und UTF8

    Hallo,
    ich verschlüssel eine txt über php mit Rijndael. Ich entschlüssle die txt dann wieder mit vb. Diese werden dann in eine ListBox geladen. Das funktioniert auch. Nur werden Wörter mit ä,ö,ü, usw. als ? dargestellt. Ich meiner Version ohne Verschlüsselung habe ich es hinbekommen, dass er mir die Zeichen richtig anzeigt. Weiß aber leider nicht mehr wie. Kann jemand helfen? Danke.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    2. 'start.Hide()
    3. Dim downloadString As String
    4. Me.Cursor() = Cursors.Default
    5. ListBox1.Items.Clear()
    6. ListBox2.Items.Clear()
    7. ' Entschlüsseln der verteiler.txt
    8. downloadString = start.downloadString
    9. Dim sEncryptedString As String = downloadString
    10. Dim myRijndael As New RijndaelManaged
    11. myRijndael.Padding = PaddingMode.Zeros
    12. myRijndael.Mode = CipherMode.CBC
    13. myRijndael.KeySize = 256
    14. myRijndael.BlockSize = 256
    15. Dim toEncrypt() As Byte
    16. Dim encrypted() As Byte
    17. Dim IV() As Byte = System.Text.Encoding.UTF8.GetBytes("11111111111111111111111111111111")
    18. Dim key() As Byte = System.Text.Encoding.UTF8.GetBytes("jdlskajdlkasdjalksjdalksdjlakappo")
    19. Dim decryptor As ICryptoTransform = myRijndael.CreateDecryptor(key, IV)
    20. Dim sEncrypted As Byte() = Convert.FromBase64String(sEncryptedString)
    21. Dim fromEncrypt() As Byte = New Byte(sEncrypted.Length) {}
    22. Dim msDecrypt As New MemoryStream(sEncrypted)
    23. Dim csDecrypt As New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)
    24. csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length)
    25. Dim entext As String = System.Text.Encoding.UTF8.GetString(fromEncrypt)
    26. ' ______________________________________________________________________________________________________________
    27. 'MsgBox(entext)
    28. System.Threading.Thread.Sleep(2000)
    29. ListBox1.Items.Clear()
    30. loadfinish = True
    31. For i As Integer = 0 To entext.Split(";").Length
    32. 'TextBox_text.Text = TextBox_text.Text & "|" & entext.Split(";").GetValue(i)
    33. Dim Data() As String = entext.Split(";").GetValue(i).Split(",")
    34. If Data(0) = "" Then
    35. Else
    36. If i = entext.Split(";").Length - 1 Then
    37. Else
    38. Namen.Add(Data(0))
    39. ListBox1.Items.Insert(i, Data(0))
    40. Email.Add(Data(1))
    41. Wache.Add(Data(2))
    42. End If
    43. End If
    44. Next
    45. Me.Cursor() = Cursors.Default
    46. End Sub

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

    Spontan würde ich sagen das es am Text encoding liegt.
    Hast du mal geprüft mit welchem Text.encoding php den Text in die Verschlüsselung schickt?
    Da es im englisch sprachigen Raum kein Umlaute gibt, führt das immer wieder zu Problemen.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    In der php steht nichts von einer Codierung.

    PHP-Quellcode

    1. /* Datei Verschlüsseln */
    2. // Liest eine Datei in ein Array.
    3. $lines = file("verteiler.txt");
    4. // Durchgehen des Arrays und Anzeigen des Quelltexts
    5. foreach ($lines as $line_num => $line)
    6. //Verschlüsseln
    7. $iv = "11111111111111111111111111111111"; // 32 * 8 = 256 bit iv
    8. $key = "jdlskajdlkasdjalksjdalksdjlakappo"; // 32 * 8 = 256 bit key
    9. $text = $line;
    10. $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv);
    11. //echo base64_encode($crypttext);
    12. ?>


    Das passiert übrigens noch im Hintergrund:

    VB.NET-Quellcode

    1. Dim wc As New System.Net.WebClient
    2. wc.DownloadString(".../mail5.php")
    3. Using wc2 As New Net.WebClient()
    4. wc2.Encoding = System.Text.Encoding.UTF8
    5. downloadString = wc2.DownloadString(".../verteiler.txt")
    6. End Using

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „112marv“ ()

    112marv schrieb:

    Dim entext As String = System.Text.Encoding.UTF8.GetString(fromEncrypt)

    Ich würde an der Stelle ansetzen und mal andere Encodings versuchen, allen voran Ansi und wenn das nicht hilft auch Unicode. Obwohl man eigentlich annehmen sollte, dass gerade sowas wie PHP von Haus aus UTF8 als Standard verwendet. Aber vielleicht wird ja vor dem Verschlüsseln des Textes noch seine Codierung geändert?
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    Ah jetzt hab ichs wieder. Ich darf warum auch immer nicht UTF8 benutzen sondern Default.

    Bsp:
    Nicht: Dim entext As String = System.Text.Encoding.UTF8.GetString(fromEncrypt)
    Sondern: Dim entext As String = System.Text.Encoding.Default.GetString(fromEncrypt)

    Funktioniert jetzt.

    Trotzdem danke.