Équivalent de RSA_public_decrypt en Java.
Bonjour tout le monde,
J'ai de nouveau un petit problème avec le Java :oops:
Je m'explique :
Mon application se connecte a un serveur, envois une requête et reçois une signature.
Je dispose donc d'une public key (qui est statique dans mon code), et d'une signature reçus par le serveur.
Je voudrais faire un RSA_public_decrypt de ma signature avec ma public key.
Cela devrait me fournir une autre public key !
Voici un morceau de code en C de ce que j'aimerais obtenir en Java :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| char * DPKey =(char *) malloc(m_publicKey.size());
strcpy(DPKey, m_publicKey.toStdString().c_str());
BIO *bp_d = BIO_new_mem_buf(DPKey, -1);
RSA *my_rsa = PEM_read_bio_RSA_PUBKEY(bp_d, NULL, NULL, NULL);
byte *inputSignature, *outputSignature;
outputSignature = (byte*) malloc(RSA_size(my_rsa));
inputSignature = (byte*)signature.data();
int buflen = RSA_public_decrypt(signature.size(), inputSignature, outputSignature, my_rsa, RSA_PKCS1_PADDING);
m_outputSignatureVector = QByteArray((const char*)outputSignature, buflen); |
m_publicKey étant un QString de Qt contenant ma public key.
En Java, j'ai un peu plus de mal a saisir la philosophie pour utiliser les classes qui manipule le RSA.
Voici ce que j'ai commencé a faire :
Code:
1 2 3 4 5 6 7 8 9 10
| Base64 base64 = new Base64();
byte[] datas = base64.decode(publicKey.getBytes());
BigInteger pubInt = new BigInteger(1, datas);
try{
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(datas);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKeyStatique = keyFactory.generatePublic(publicKeySpec);
}
catch(Exception e){System.out.println(e);} |
Avec publicKey un String de ma public key statique encodé en base 64 et sans les en-tête : -----BEGIN PUBLIC KEY----- et -----END PUBLIC KEY-----
Normalement, avec ce code j'ai mon objet représentant ma public key.
Il me manque donc ma signature.
J'ai vus sur internet, qu'il existait une classe Java Signature, mais je n'ai pas du tout compris comment l'utiliser.
Il y a plusieurs méthodes que je n'ai pas compris.
Merci d'avance pour votre aide ;)