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.
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[=�
Padding.Zeros
scheint am besten zu sein. Ich kann auch Padding.None
nicht verwenden, weil es ein NotSupportedException: bad data length
. Wirft. Mode
wurde zu CBC geändert (nicht dass es wichtig wäre). WebUtility.HtmlDecode()
verwendet, um den Titel zu dekodieren, aber das hat ihn nicht beeinflusst. 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.
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% 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.
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.
Und am Ende der Entschlüsselung würde ich die Ausgabe trimmen.
Tags und Links c# cryptography aes aescryptoserviceprovider