2009-05-08 3 views
0

J'utilise standard de remplissage AES/CBC/PKCS5Padding en Java et mon ami utilise PKCS7 standard dans C# .NET Si mon ami crypter les données en utilisant AES et envoyez-moi la clé alors je peux décryptez-le.javax.crypto.IllegalBlockSizeException dans le cryptage AES

Mais si ma longueur de données augmente de plus de 2920 octets, alors si je crypte les données dans C# .NET et décrypte les données dans java alors mon décryptage ne fonctionne pas bien. Il me donne l'erreur suivante.

« javax.crypto.IllegalBlockSizeException: Longueur d'entrée doit être un multiple de 16 lors du déchiffrement avec chiffrement rembourré »

Merci de Bapi

+0

recherche sur Google pour « longueur d'entrée doit être un multiple de 16 avec chiffrement lors du déchiffrement matelassée » donne des réponses de l'abondance. – skaffman

+0

Balise C# ajoutée - cela ressemble à un problème de ne pas vider le tampon en C# que vous voyez alors en Java. Vous pouvez également contourner l'ensemble du problème de remplissage en utilisant le mode CTR (généralement plus sécurisé). –

Répondre

1

Encore vous oublié de vider les tampons qui signifie que le flux de données est incomplète . [EDIT] Je ne connais pas le C# mais en Java, vous devez appeler une fois doFinal() une fois que toutes les données sont arrivées. (Voir the docs).

La source du problème est que l'API de chiffrement doit savoir quand vous avez terminé. Il ne peut pas dire à partir des données, vous devez appeler une méthode pour dire "envelopper, créer la somme de contrôle finale, peu importe, de sorte que le récepteur peut le décoder".

+0

Comment vider le tampon? – Deepak

0

il suffit d'utiliser cipher.dofinal("Your byte array","offset...put 0","block size...16");

eg : c.dofinal(ByteArray,0,16); 
Questions connexes