Ich habe folgendes beobachtet, als ich mit Chiffre .
Verschlüsselungscode:
%Vor%Entschlüsselungscode:
%Vor%Ich bekomme IllegalBlockSizeException (Eingabe Länge muss mehrere 16 sein, wenn ...) beim Ausführen des Decrypt-Codes.
Aber wenn ich den Entschlüsselungscode zu
ändere %Vor% Es funktioniert gut.
Ich verstehe, dass es im Muster algorithm/mode/padding
ist. Also dachte ich, es liegt daran, dass ich die Polsterung nicht erwähnt habe. Also habe ich versucht, während der Verschlüsselung Modus und Padding zu geben,
Verschlüsselungscode:
%Vor%Entschlüsselungscode:
%Vor%Aber es schlägt mit IllegalBlockSizeException fehl.
Was ist der Grund, warum die Ausnahme und was genau darunter passiert? Wenn jemand helfen kann? Vielen Dank im Voraus
AKTUALISIEREN
Sieht so aus, als wäre das Problem mit der Zeichenfolge, die ich ver- und entschlüssle. Denn selbst der Code, den ich gesagt habe, funktioniert nicht immer. Ich verschlüssle grundsätzlich UUIDs (zB: 8e7307a2-ef01-4d7d-b854-e81ce152bbf6). Es funktioniert mit bestimmten Strings und nicht mit bestimmten anderen.
Die Länge der verschlüsselten Zeichenfolge ist 64, die durch 16 teilbar ist. Ja, ich benutze es auf dem gleichen Rechner.
Methode zur Erzeugung eines geheimen Schlüssels:
%Vor% Während der Entschlüsselung kann man nur ein IllegalBlockSizeException
erhalten, wenn die Eingabedaten kein Vielfaches der Blockgröße sind (16 Bytes für AES).
Wenn der Schlüssel oder die Daten ungültig (aber in der Länge korrekt) waren, würden Sie BadPaddingException
erhalten, weil die PKCS # 5-Auffüllung im Klartext falsch wäre. Sehr gelegentlich würde die Auffüllung zufällig erscheinen und Sie hätten keine Ausnahme.
N.B. Ich würde empfehlen, dass Sie immer das Padding und den Modus angeben. Wenn Sie dies nicht tun, können Sie überrascht sein, wenn der Anbieter die Standardeinstellungen ändert. AFAIK, der Sun-Anbieter konvertiert "AES"
in "AES/ECB/PKCS5Padding"
.
Obwohl ich die Interna nicht vollständig verstanden habe, habe ich herausgefunden, was das Problem ist.
Ich hole die verschlüsselte Zeichenfolge als GET-Anforderungsparameter ab. Da die Zeichenfolge unsichere Zeichen enthält, wird die Zeichenfolge während der Anfrage beschädigt. Die Lösung ist, URL-Codierung und -Dekodierung durchzuführen.
Ich kann es erfolgreich mit dem URLEncoder durchführen URLDecoder .
Jetzt sind die Ergebnisse konsistent. Danke:)
Ich wäre dankbar, wenn jemand mehr dazu beitragen könnte.
Tags und Links java encryption aes