Warum erscheinen zufällige Zeichen in meinem entschlüsselten Text?

9

Einführung

Ich versuche, Texte zu verschlüsseln und zu entschlüsseln und manchmal, besonders bei größeren Texten, erscheinen zufällige Zeichen innerhalb des entschlüsselten Textes. Ich verwende die AES-Kryptographie im Namensraum System.Security.Cryptography , und der Text, den ich gerade verschlüsseln möchte, wäre eine URL und einige Informationen, wie der Seitentitel. Ich habe unten ein Beispiel angegeben und was ich versucht habe. Ich habe auch die zwei Verschlüsselungs- und Entschlüsselungsmethoden geschrieben, abzüglich aller Zeilen, die im Debug Window ausgegeben werden. Die verwendeten Schlüssel und IV sollten kein Problem sein, da sie vorerst konstant sind.

Ich denke, es wäre weise für mich, darauf hinzuweisen, dass es 18/01/2013;18/01/2013 in einem separaten Fall wie erwartet verschlüsselt und entschlüsselt.

Beispiel

Sprich ich wollte diesen Text entschlüsseln:

Barnabe Googes Information & Homepage | Search and Research on BarnabeGooge.com;18/01/2013;18/01/2013;;http://www.googe.com

Standardmäßig wird UTF-8 verwendet und es wird verschlüsselt:

뤟౏羜ڮ胂淺弊놛荧ꠃ錺槝ヸ蘜ầᄼꕒヘ⍩㗪潺뱂施㒞ꨛ殳硪픴ی뿨춃�燲ᯁﱪ뙊힓琲鯖嶑⨹갂Ѭ쳀鿜�྄䋖⭫ퟂ㪏�荾ꆺשּ붹梾麦膛

Und entschlüsselt zurück zu:

Barnabe Googes Information & Homepage | Search and Research on B���Ax2�!��f�M]18/01/20�;18/01[�;>َ�l?����m��*-��+��^A[=�

Was ich versucht habe

  • Ich habe versucht, zu anderen Kodierungen zu wechseln, aber UTF-8 scheint den entschlüsselten Text am wenigsten zu beeinflussen.
  • Wurde auf verschiedene Arten von Auffüllen geändert, aber Padding.Zeros scheint am besten zu sein. Ich kann auch Padding.None nicht verwenden, weil es ein NotSupportedException: bad data length . Wirft.
  • Die Mode wurde zu CBC geändert (nicht dass es wichtig wäre).
  • Flush / Close CryptoStream, damit der letzte Block oder so etwas geleert werden kann.
  • Nur für den Fall, dass der Fehler mit dem Titel zusammenhängt, habe ich WebUtility.HtmlDecode() verwendet, um den Titel zu dekodieren, aber das hat ihn nicht beeinflusst.

Verschlüsselungsmethode

Die folgende Verschlüsselung verwendet die AES-Verschlüsselung, wie Sie sehen können. Ich möchte darauf hinweisen, dass key und IV zwei globale Strings innerhalb der gleichen Klasse wie die Verschlüsselungs- und Entschlüsselungsmethoden sind. Der Grund, warum ich das getan habe, ist, mit verschiedenen Codierungen und CryptographyServiceProviders herumzualbern, nur wenn zufällig eine zufällige Änderung funktioniert. Bitte ignorieren Sie diese als konstant und haben keinen Einfluss auf die endgültige Verschlüsselung / Entschlüsselung.

%Vor%

Entschlüsselungsmethode

%Vor%

Bootnote

Nur für den Fall, dass es darauf ankommt, benutze ich dies, um den Titel der Webseite zu erhalten, aber wie ich bereits erwähnt habe, hat die Verwendung von HtmlDecode keinen Einfluss darauf.

%Vor%     
Brownish Monster 18.01.2013, 18:14
quelle

2 Antworten

2

Dank Hans Passant habe ich die Lösung gefunden. Das Problem war, dass ich beim Verschlüsseln und Entschlüsseln Encoding.GetString() oder Encoding.GetBytes() verwendet habe, wenn ich Convert.ToBase64String() oder Convert.FromBase64String() hätte verwenden sollen.

    
Brownish Monster 18.01.2013, 19:14
quelle
-1

Ich hatte das gleiche Problem mit der zusätzlichen Ausgabe. Für mich war es kein Codierungsproblem, da ich es als Byte-Array in der BCrypt-Bibliothek übergeben habe. Da es sich um Klartext handelt, verwende ich Leerzeichen vor der Verschlüsselung und trim nach der Entschlüsselung.

%Vor%

Bei 128 Bit-Verschlüsselung lautet die Blockgröße 16 . Beachten Sie, dass buf_size ein Mehrfaches von block-size sein sollte, damit es die ganze Zeit funktioniert. Da wir die Eingabe bereits aufgefüllt haben, brauchen wir den Auffüllalgorithmus bei der Entschlüsselung nicht.

%Vor%

Und am Ende der Entschlüsselung würde ich die Ausgabe trimmen.

    
shuva 10.01.2018 20:06
quelle