J2ME AES Decryption Fehler (org.bouncycastle.crypto.InvalidCipherTextException: pad Block beschädigt)

StackOverflow https://stackoverflow.com/questions/4323952

Frage

Ich mache die Verschlüsselung und Entschlüsselung mit AES-Algorithmus mit Hüpfburg

Meine Verschlüsselung und Entschlüsselung funktioniert ok, aber es gibt mir Fehler, wenn meine Klartextgröße größer ist

sogar manchmal es gibt nicht entschlüsselten Daten

public static boolean setEncryptionKey(String keyText)
{
    byte[] keyBytes = keyText.getBytes();

    key = new KeyParameter(keyBytes);
    engine = new AESFastEngine();
    cipher = new PaddedBufferedBlockCipher(engine);

    return true;
}

Verschlüsselung:

public static String encryptString(String plainText)
{

        byte[] plainArray = plainText.getBytes();

        cipher.init(true, key);
        byte[] cipherBytes = new byte[cipher.getOutputSize(plainArray.length)];
        int cipherLength = cipher.processBytes(plainArray, 0, plainArray.length, cipherBytes, 0);
        cipher.doFinal(cipherBytes, cipherLength);
        String cipherString = new String(cipherBytes);
        return cipherString;
    }

Decryption:

public static String decryptString(String encryptedText)
{

        byte[] cipherBytes = encryptedText.getBytes();
        cipher.init(false, key);
        byte[] decryptedBytes = new byte[cipher.getOutputSize(cipherBytes.length)];
        int decryptedLength = cipher.processBytes(cipherBytes, 0, cipherBytes.length, decryptedBytes, 0);
        cipher.doFinal(decryptedBytes, decryptedLength);
        String decryptedString = new String(decryptedBytes);

        int index = decryptedString.indexOf("\u0000");
        if (index >= 0)
        {
            decryptedString = decryptedString.substring(0, index);
        }
        return decryptedString;
    }

Diese Entschlüsselung gibt mir folgende Fehler

org.bouncycastle.crypto.InvalidCipherTextException: pad block corrupted
        at org.bouncycastle.crypto.paddings.PKCS7Padding.padCount(+30)
        at org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher.doFinal(+190)
        at com.NewCrypto.decryptString(NewCrypto.java:103)
        at com.New_Midlet.startApp(New_Midlet.java:23)
        at javax.microedition.midlet.MIDletProxy.startApp(MIDletProxy.java:44)
        at com.sun.midp.midlet.Scheduler.schedule(Scheduler.java:375)
        at com.sun.midp.main.Main.runLocalClass(Main.java:477)
        at com.sun.midp.main.Main.main(+80)

, was das Problem sein könnte?

War es hilfreich?

Lösung

Die Zeile

String cipherString = new String(cipherBytes);

Das ist ein Fehler. cipherBytes ist ein Byte-Array mit beliebigen Werten und kann nicht in eine Zeichenfolge jede des Java-String-Decoders unter Verwendung überführt werden. Sie sollten nur senden / speichern Chiffre als Byte-Array. Wenn Sie es einen String machen muss dann werden Sie einen Encoder verwenden. Base64-Geber häufig verwendet werden, sind als Base16 (hex). Sie können die Apache Commons Codec verwenden oder mein Favorit, die Härtere Base64-Codec .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top