Ich mache die Verschlüsselung und Entschlüsselung mit AES-Algorithmus mit HüpfburgJ2ME AES Decryption Fehler (org.bouncycastle.crypto.InvalidCipherTextException: pad Block beschädigt)
Meine Verschlüsselung und Entschlüsselung funktioniert ok, aber es gibt mir eine Fehlermeldung, wenn meine Ebene Textgröße ist größer
sogar manchmal ist es nicht entschlüsselten Daten geben
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 könnte das Problem sein?
Jeder Base64-Coder, der immer noch Bytes anstelle von Zeichen ausgibt, ist meiner Meinung nach etwas idiotisch. Ich kann bereits den Horror sehen, wenn jemand versucht, es in eine UTF-16-XML-Datei zu streamen. Es scheint auch keine anderen Formen von base64 als die Standardversion zu unterstützen. Mmm, vielleicht sollte ich meinen Encoder auch zur Verfügung stellen. –
@owlstead: Ich stimme zu. Der Harder-Codec wird Strings ausgeben und den idiotischen Apache-Commons-Stil unterstützen. –