Pb Cipher encrypte/décrypte avec les clés d'un certificat

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 - 8 mars 2011 à 15:29
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 - 21 mars 2011 à 15:50
Bonjour amis codeurs,

Alors voilà mon problème, je cherche à vérifier que l’encryption RSA d'une donnée via un certificat s'est bien passée, en la décryptant grâce à la clé public dudit certificat. Essuyant de nombreux échecs j'en suis venu à pondre un petit bout de code qui résume mon problème, le voici :

/***********************************************************/
String message	=   "un message à encrypter";
String alias	= "FAKE-alias";

// on load le keystore
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null);

// on récupère un certif, sa clé privée et sa clé publique
X509Certificate certificate	= (X509Certificate)ks.getCertificate(alias);
PrivateKey	privatekey	= (PrivateKey)ks.getKey(alias, null);
PublicKey	publickey	= certificate.getPublicKey();

// on ciphe dans un sens
Cipher cipherencrypt = Cipher.getInstance("RSA");
cipherencrypt.init(Cipher.ENCRYPT_MODE, privatekey);
byte[] encrypted = cipherencrypt.doFinal(message.getBytes());

// on ciphe dans l'autre sens
Cipher cipherdecrypt = Cipher.getInstance("RSA");
cipherdecrypt.init(Cipher.DECRYPT_MODE, publickey);
byte[] decrypted = cipherdecrypt.doFinal(encrypted);

System.out.println(new String(decrypted));
/***********************************************************/


Sur le dernier doFinal() j'ai l'exception suivante :
javax.crypto.BadPaddingException: Data must start with zero
(je vous passe le reste de la pile)

* Pour être sûr de pas écrire n'importe quoi j'ai tenté la même manip' avec une paire de clés générées par KeyPairGenerator, et j'obtiens bien la relation :
Message = Décrypte(Encrypte(Message, ClePrivée), CléPublique)
* J'ai également tenté différents Modes et Paddings pour l'instanciation des cipher (ex. : "RSA/ECB/PKCS1Padding")

Alors qu'est-ce que je rate ? y'a une notion qui m'échappe, nécessairement ...

Merci d'avance pour vos contributions à venir :)

PS : comment on change l'adresse mail de son compte cs ?
De souvenir je pointe vers une adresse à laquelle je n'accède plus, j'aimerais bien mettre ça à jour.

3 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
11 mars 2011 à 11:57
Petit up avant le week-end.

Hésitez pas à faire la moindre proposition, à poser des questions pour des précisions, ou même sortir un blague pour garder mon topic en haut ^^

Et je serai connecté tout ce week-end, j'attends vos interventions avec impatience.
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
16 mars 2011 à 10:02
Re salut,

Autre angle d'attaque du même problème, car je vois que le sujet présenté comme il l'est ne motive pas grand monde ^^

Je monte un objet de type javax.xml.crypto.dsig.XMLSignature (avec une XMLSignatureFactory, un SignedInfo et tout le tralala), puis que je fais appel à sa fonction sign(DOMSignContext). J'obtiens un une jolie signature XAdEs. Jusque là tout va bien (c'est l'atterrissage qui fait mal ^^).

Maintenant je reprends cette signature XML, je récupère la valeur de la signature via xmlSignature.getSignatureValue().getValue(). Je passe cette valeur dans un cipher RSA en DECRYPT_MODE avec la clé publique du certificat qui a servi à signer le doc. Magie ! ça passe ... mais le byte[] de sortie n'a aucun sens :(

Je tente de comparer à mes données, à mes données SHA-1-ées, et même SHA-256-ées, mais rien. D'ailleurs le charabia sorti du cipher taille 35 octets, ce qui correspond à aucun SHA (20 bytes pour le SHA-1 ou 32 bytes pour SHA-256).

Si ça vous parle plus ...
Je dois être à côté de la plaque sur certaines notions ...
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
21 mars 2011 à 15:50
Up ! (au cas où des gens ayant des info viendraient de s'inscrire ^^)
0
Rejoignez-nous