Android Cipher wirft BadPaddingException, aber nicht in Java

Ich verwende eine grundlegende Verschlüsselung in meiner App, auf der Android v20 (4.4.4) ausgeführt wird.

Dies hat früher funktioniert, aber ich denke, mit der neueren Version von Android, die ich verwende, gibt es jetzt einen Fehler, der die folgende Ausnahme auslöst:

10-28 12:42:02.312    5173-5332/com.app W/System.err﹕ javax.crypto.BadPaddingException: pad block corrupted
10-28 12:42:02.312    5173-5332/com.app W/System.err﹕ at com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(BaseBlockCipher.java:739)
10-28 12:42:02.322    5173-5332/com.app W/System.err﹕ at javax.crypto.Cipher.doFinal(Cipher.java:1204)
10-28 12:42:02.322    5173-5332/com.app W/System.err﹕ at com.app.utils.CryptoClass.decrypt(CryptoClass.java:47)
10-28 12:42:02.322    5173-5332/com.app W/System.err﹕ at com.app.utils.CryptoClass.decrypt(CryptoClass.java:30)

Die Methode, die dies auslöst, ist hier:

private static byte[] decrypt(byte[] rawKey, byte[] encrypted) throws Exception {
    SecretKeySpec spec = new SecretKeySpec(rawKey, "AES");
    Cipher cipher = Cipher.getInstance("AES");

    cipher.init(Cipher.DECRYPT_MODE, spec);

    return cipher.doFinal(encrypted); //THIS LINE THROWS EXCEPTION
}

Wenn ich denselben Code wie ein Java-Projekt ausführe, funktioniert er ordnungsgemäß (mit derselben Java-Version 1.7 wie Android).

Ich habe verschiedene Kombinationen für den Parameter getInstance ausprobiert, basierend auf dem, was ich online gefunden habe, wieAES/CBC/PKCS5PADDING aber das löst das Problem nicht.

Die getRawKey-Methode, die ich verwende:

private static byte[] getRawKey(byte[] bytes) throws Exception {
    KeyGenerator keygen = KeyGenerator.getInstance("AES");
    SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG", "SECRET");

    secureRandom.setSeed(bytes);
    keygen.init(128, secureRandom);

    SecretKey secretKey = keygen.generateKey();
    return secretKey.getEncoded();
}

Jede Hilfe dankbar, danke.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage