AES-Verschlüsselung : javax.crypto.IllegalBlockSizeException: Letzte block unvollständige Entschlüsselung
Ich versuche zu entschlüsseln verschlüsselter Daten von einem web service mit AES128-Verschlüsselung.
folgenden ist der code, den ich benutze, um das gleiche zu erreichen.
Aber ich immer am Ende mit der folgenden Ausnahme:
javax.crypto.IllegalBlockSizeException: last block incomplete in decryption
public static String decrypt(String strToDecrypt)
{
try
{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
final SecretKeySpec secretKey = new SecretKeySpec(AppConstants.AESEncryptionKey.getBytes("UTF8"), "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey,new IvParameterSpec(new byte[16])); //new IvParameterSpec(new byte[16])
byte base64Data[] = Base64.encode(strToDecrypt.getBytes(), Base64.DEFAULT);
@SuppressWarnings("unused")
String s = base64Data.toString();
byte decBytes[] = cipher.doFinal(base64Data);
String decStr = new String(decBytes);
return decStr;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
Bitte Gießen Sie Ihre wertvollen inputs, wie ich bin, schlecht, stecken hier.
In welchem format ist die Zeichenfolge, die Sie bekommen aus dem web-Dienst? Base64-kodiert?
ich bin immer eine verschlüsselte Zeichenfolge, die ich konvertieren es in base64-kodierter string und dann entschlüsseln
ich bin immer eine verschlüsselte Zeichenfolge, die ich konvertieren es in base64-kodierter string und dann entschlüsseln
InformationsquelleAutor iAviatorJose | 2014-05-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie die Codierung der-base-64-codierte geheim-anstelle der Decodierung. Je nach
Base64
Sie brauchen, um eine Funktion aufzurufen, dekodiert aus einemString
oderCharSequence
auf ein array von bytes, und dann zu entschlüsseln. Bitte testen, wenn das Ergebnis ein Vielfaches der Blockgröße von 16 Byte für AES.ok sir auf mit decode-Funktion, erhalte ich folgende exception nun javax.crypto.BadPaddingException: pad block corrupted
OK, also der verschlüsselte Text hat die richtige Blockgröße jetzt. Die oben genannten Ausnahme ist, wenn Sie die falsche Taste Wert, wenn der Chiffretext beschädigt ist oder wenn die IV ist falsch für sehr kurze ciphertext Längen.
Ich habe IV wie dieser Chiffre.init(Cipher.DECRYPT_MODE, secretKey,neue IvParameterSpec(new byte[16])); gibt es etwas falsch mit dieser Art Einstellung, eine iv -
Nein, funktionell und passt sich der Verschlüsselung. Das problem liegt wahrscheinlich anderswo, mit dem Schlüssel übereinstimmen, Byte zuerst (drucken Sie auf beiden Seiten mit hex direkt vor der Verschlüsselung/Entschlüsselung). Festlegen einer statischen IV ist jedoch nicht kryptographisch sicher sind, sollten Sie verwenden einen zufälligen Wert und Präfix Geheimtext nach dem beheben der Probleme.
InformationsquelleAutor Maarten Bodewes
Zu nennen Base64.decodeBase64(s). Dann rufen Sie Chiffre.doFinal()
Chiffre.doFinal(Base64.decodeBase64(s));
in android eclipse bekomme ich die folgende Fehlermeldung, wenn ich decodeBase64(string) :Die Methode decodeBase64(String) ist nicht definiert für den Typ Base64
gut, die
Base64
verwenden Sie und welche Methoden zur Verfügung. Etwas Eigeninitiative wäre schön.ich bin mit android.util.Die Base64-Klasse für die Decodierung des base64-kodierte verschlüsselte text und dann entschlüsseln.
So überprüfen Sie stackoverflow
InformationsquelleAutor UVM
Wichtiger Hinweis
In meinem Fall kam diese Frage, weil Verschlüsselung nicht richtig gemacht,
wenn ich versuche, um Daten zu verschlüsseln, die mal meinen code durch den Fehler, dass ist der Grund, warum in der Mitte ist die Verschlüsselung beendet,
also, wenn Sie überprüfen Sie Ihre Verschlüsselung richtig funktioniert.
InformationsquelleAutor Yogesh Rathi