GNT sans publicité, site mobile, fonctionnalitées exclusives...

Crypto Java DES CBC InvalidKeyException

Le
zombinette
Bonjour,

j utilise actuellement le JCE de Sun pour faire du ciffrement et
dechiffrement avec l algo DES CBS NoPadding

je genere une clef DES de taille 56 ainsi :
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
Key key = keyGenerator.generateKey();

je chiffre et dechiffre ainsi :

Cipher cipher = Cipher.getInstance("DES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] cryptedText = cipher.doFinal(mess);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decryptedText = cipher.doFinal(cryptedText)

sachant que mess est un byte[] de taille 128 donc multiple de 8, donc
pas de padding
et j obtiens l erreur suivante :

java.security.InvalidKeyException: Parameters missing
at com.sun.crypto.provider.SunJCE_h.a(DashoA6275)
at com.sun.crypto.provider.DESCipher.engineInit(DashoA6275)
at javax.crypto.Cipher.init(DashoA6275)

que je ne comprends pas, quels parametres manque t il?

merci!!
Lire les 5 réponses

Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacques-Olivier Haenni
Le #194406
Bonjour,

Il manque peut-être les vecteurs initiaux (initial vectors, IVs) pour le
mode de chainage CBC pour le décryptage.

Jacques-Olivier

zombinette wrote:

Bonjour,

j utilise actuellement le JCE de Sun pour faire du ciffrement et
dechiffrement avec l algo DES CBS NoPadding

je genere une clef DES de taille 56 ainsi :
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
Key key = keyGenerator.generateKey();

je chiffre et dechiffre ainsi :

Cipher cipher = Cipher.getInstance("DES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] cryptedText = cipher.doFinal(mess);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decryptedText = cipher.doFinal(cryptedText)

sachant que mess est un byte[] de taille 128 donc multiple de 8, donc
pas de padding
et j obtiens l erreur suivante :

java.security.InvalidKeyException: Parameters missing
at com.sun.crypto.provider.SunJCE_h.a(DashoA6275)
at com.sun.crypto.provider.DESCipher.engineInit(DashoA6275)
at javax.crypto.Cipher.init(DashoA6275)

que je ne comprends pas, quels parametres manque t il?

merci!!





zombinette
Le #194404
Merci pour la reponse!
savez vous comment initier ces vecteurs?
je vois bien une methode Cipher.getIV() pour recupérer le vecteur d
initialisation mais je ne vois pas comment opérer l initiation
Jacques-Olivier Haenni
Le #194403
Bonjour,

Voici une page Web qui vous fournira bien plus d'informations, exemples
à l'appui, que ce que je pourrais vous fournir directement :)

http://java.sun.com/j2se/1.4.2/docs...Guide.html

Ce document contient beaucoup d'exemples, ce qui n'est pas toujours le
cas d'un "guide de référence"...

Avec cette documentation, j'ai réussi assez facilement à mettre en
oeuvre l'algorithme de cryptographie qu'il me fallait (y compris un mode
de chainage CBC), mais je ne me rappèle plus de tous les détails par
coeur...

Bonne lecture,

Jacques-Olivier


zombinette wrote:

Merci pour la reponse!
savez vous comment initier ces vecteurs?
je vois bien une methode Cipher.getIV() pour recupérer le vecteur d
initialisation mais je ne vois pas comment opérer l initiation





zombinette
Le #194402
Merci j ai reussi à resoudre mon probleme grace à un bout de code
présent sur la page que vous avez mis en lien (d ailleurs, cette page,
j y vais deja frequemment, mais je n avais pas cherché dessus pour
CBC)
Pour info, il fallait faire :

KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
SecretKey key = keyGenerator.generateKey();
Cipher cipher = Cipher.getInstance("DES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] cryptedText = cipher.doFinal(dataOne);
byte[] encodedParams = cipher.getParameters().getEncoded();
AlgorithmParameters params =
AlgorithmParameters.getInstance("DES");
params.init(encodedParams);
cipher.init(Cipher.DECRYPT_MODE, key, params);
byte[] decryptedText = cipher.doFinal(cryptedText);
guizmill Hors ligne
Le #23000561
zombinette a écrit le 30/05/2005 à 14h51 :
Merci j ai reussi à resoudre mon probleme grace à un bout de code
présent sur la page que vous avez mis en lien (d ailleurs, cette page,
j y vais deja frequemment, mais je n avais pas cherché dessus pour
CBC)
Pour info, il fallait faire :

KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
SecretKey key = keyGenerator.generateKey();
Cipher cipher = Cipher.getInstance("DES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] cryptedText = cipher.doFinal(dataOne);
byte[] encodedParams = cipher.getParameters().getEncoded();
AlgorithmParameters params =
AlgorithmParameters.getInstance("DES");
params.init(encodedParams);
cipher.init(Cipher.DECRYPT_MODE, key, params);
byte[] decryptedText = cipher.doFinal(cryptedText);


Bonjour,

Je ne sais pas si cette entraide est encore d'actualité mais j'ai un problème concernant le 3DES.

Je possède deux clés calculées Ka et Kb qui peuvent former une seul clé, Kenc. Je possède aussi un message à codé en 3DES que j'appellerais S. J'utilise Java. Je souhaite coder mon message S avec la clé Kenc. Je pense avoir un problème avec le cypher.init: est-il possible de faire passer le message ainsi que la clé? Sinon, comment faire?

PS: Je fait ça pour un projet qui a pour but de lire un passeport.
Publicité
Suivre les réponses
Poster une réponse
Anonyme