AES-PKCS7-padding
Ich nur anfangen, zu lernen, Hüpfburg für die AES-Verschlüsselung/Entschlüsselung. Ich bin mit AES/CBC/PKCS7PADDING
mit einer 256-bit-Schlüssel.
BC kann verschlüsseln und entschlüsseln von text erfolgreich, aber nach der Entschlüsselung merke ich, dass es immer ein paar Polster von null (0x00), die daher nicht meine hash-Vergleich. Zum Beispiel, angenommen, das original-input-string ist “1234567890”
, die entschlüsselt byte-array ist immer:
{0x49,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x48,0x00,0x00,0x00,0x00,0x00,0x00}
Warum die Polsterung ist nicht 0x06,0x06,0x06,0x06,0x06,0x06
? Und gibt es eine Möglichkeit, zu deterministisch sagen, die Polsterung Länge (kann 0 sein) nach der Verschlüsselung, so dass ich bekommen kann genau die gleichen Zeichenfolge vor der Verschlüsselung?
InformationsquelleAutor user908645 | 2015-02-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie angeben, PKCS7 -, BC wird die Polsterung um die Daten vor der Verschlüsselung, und entfernen Sie es wieder, wenn die Entschlüsselung. PKCS7 - mit AES würde immer mindestens 1 byte padding, und fügen Sie genug Daten, um die Eingabe ein Vielfaches der AES-block-Größe. Beim entschlüsseln der Polsterung ist überprüft korrekt zu sein, und im Falle von PKCS7 dienen auch als Indikator, wie viel der Letzte block der entschlüsselten Daten ist die Polsterung, und wie viel ist real Daten.
Wenn Sie versuchen, entschlüsseln der verschlüsselten und gepolsterte Daten ohne Angabe PKCS7 in den entschlüsseln-Schritt, die Polsterung wäre noch in den entschlüsselten Daten.
Edit:
Zu meinen Standpunkt zu verdeutlichen .. hier ist einige Java-code, der verschlüsselt "1234567890" mit AES/CBC/PKCS7 -, und dann entschlüsselt es wieder mit und ohne PKCS7 padding:
Ausgabe:
Beim entschlüsseln mit der Polsterung option, die Ausgabe wurde gestreift, der Polster - und der Namenszug zeigt, 10 bytes Daten entschlüsselt - der rest des Puffers wird mit 0 gefüllt. Entschlüsseln ohne die Polsterung option, die Ergebnisse in die Polsterung nun als Teil der entschlüsselten Daten.
Edit2:
Nun sehen, das original-code, bestätigt meine Vermutung. Die methode
GetOutputSize
nicht zurückkehren, wird die Ausgabe der Größe der entschlüsselten Zeichenfolge, sondern nur der maximale Platz brauchen, in einen Ausgabepuffer. Die methode haben die folgende Dokumentation im BC-code:DoFinal gibt die tatsächliche Länge der entschlüsselten Daten im Puffer.
So, in
Den
plainTextBuffer
wäre etwas größer als die eigentlichen Daten entschlüsselt - die tatsächliche Länge der Daten wäre inlength
.00
.Ein byte des padding wird immer Hinzugefügt und dann entfernt entschlüsseln. Sie normalerweise nicht sehen, die Polsterung überhaupt. Meine Vermutung ist, dass Sie mehr drucken aus dem Puffer als tatsächlich zurückgesandt wird durch das entschlüsseln. Welche Sprache verwenden Sie? Was ist die Länge der entschlüsselten Daten, wie berichtet, die durch BC?
Bodewes - können Sie näher auf die downvote? Ein entschlüsseln ala diese in java:
byte[] plainData = new byte[encryptedData.length];
int length = cipher.doFinal(encryptedData, 0);
geben würde die Ausgabe wie in der Frage, wenn Sie ignorieren die Länge zurückgegeben, die durch die Chiffre.Ohne den code in den Kommentar, ich glaube nicht, es ist klar, dass Sie erwarten, dass die null-bytes zu den ursprünglichen Inhalt einer neu erstellten array. Eigentlich, wenn Sie einfach aktualisieren Sie Ihre Antwort zu gehören obige code und schreiben Sie Ihre Antwort um ihn herum, ich würde gerne upvote.
Bodewes schauen Sie wieder ..
InformationsquelleAutor Ebbe M. Pedersen
ich bin mit c# von bouncycastle. sieht für mich könnte dies ein bug von bouncycastle, oder zumindest bouncycastle c# - Implementierung nicht Folgen pkcs7-spec genau.
meine Lösung ist abhacken die nachfolgenden bytes, die nicht in der Rückkehr Länge von DoFinal. noch nicht ganz sicher, warum gibt es Polsterung von 0x00 auf, die, wie gesagt, sollten Sie nicht existiert.
unten ist der code. ich verwendet, AES/CBC/PKCS7PADDING für ver-und Entschlüsselung.
Verschlüsselung --->
Entschlüsselungs - - - - >
InformationsquelleAutor user908645