Bonjour tout le monde,
J'ai de nouveau un petit problème avec le Java
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 :
m_publicKey étant un QString de Qt contenant ma public key.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
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 :
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-----
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);}
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
Partager