Je fais le chiffrement et le déchiffrement en utilisant l'algorithme AES avec château gonflableErreur J2ME AES déchiffrage (org.bouncycastle.crypto.InvalidCipherTextException: bloc de tampon corrompu)
fonctionne Mon chiffrement et le déchiffrement ok mais il me donne erreur lorsque ma plaine la taille du texte est plus grand
même parfois, il donne des données non déchiffrées
public static boolean setEncryptionKey(String keyText)
{
byte[] keyBytes = keyText.getBytes();
key = new KeyParameter(keyBytes);
engine = new AESFastEngine();
cipher = new PaddedBufferedBlockCipher(engine);
return true;
}
cryptage:
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;
}
Décryptage:
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;
}
Ce décryptage me donne erreur suivant
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)
ce qui pourrait être le problème?
Tout codeur base64 qui sort encore des octets au lieu de caractères est un peu idiot à mon avis. Je peux déjà voir l'horreur quand quelqu'un essaie de le diffuser dans un fichier XML UTF-16. En outre, il ne semble pas soutenir d'autres formes de base64 que celle par défaut. Mmm, peut-être que je devrais rendre mon encodeur disponible aussi. –
@owlstead: Je suis d'accord. Le codec Harder produira des chaînes de caractères et supportera le style idiot d'Apache commons. –