Bonjour,

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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/***********************************************************/
String message	= "un message à encrypter";
String alias	= "FAKE-alias";
String pass	= "FAKE-pass";
 
// 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, pass.toCharArray());
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(CléPublique, Encrypte(ClePrivée, Message)

* J'ai également tenté différents Modes et Paddings pour l'instanciation des cipher (ex. : "RSA/ECB/PKCS1Padding")

Comme vous pouvez le voir je patauge bien comme il faut. Toute aide sera donc la bienvenue, merci d'avance

PS : j'ai cherché des pistes sur différents forum (notamment celui-ci), mais plus j'en lis plus ça m'embrouille, rien ne fonctionne comme je l'imagine :s