Bonjour à tous,

je débute en java, et j'ai besoin de vérifier une signature dans un message de réponse que je reçois. Cela fait un bon moment que je consulte le web sur le sujet, mais je n'arrive pas à valider ce message.

Pour signer ma requête, je dispose d'un certificat avec clé privée intégrée, et pour vérifier la réponse, je dispose d'un autre certificat et de la clé publique associée.

la structure du message est la suivante :
<DATA>clearData</DATA><SIGNATURE>signature</SIGNATURE>

signature a sans doute été généré à partir de clearData avec le code suivant :


generator.addSigner(privateKey, certif, "1.3.14.3.2.26");
CMSSignedData csd = generator.generate( new
CMSProcessableByteArray(clearData.getBytes()), false, "BC");
signature= csd.getEncoded();


(c'est l'algo que nous utilisons pour envoyer notre requête et qui est accepté par le serveur qui nous renvoie sa réponse).


J'ai essayé 2 algo :
CMSSignedData signature = new CMSSignedData(signature);
SignerInformation signer = (SignerInformation) signature
.getSignerInfos().getSigners().iterator().next();

System.out.println(signer.verify(certificate2.getPublicKey(), "BC"));

Ce code échoue avec l'exception :
Error constructing implementation (algorithm: MD5WithRSAEncryption, provider: BC, class: org.bouncycastle.jce.provider.JDKDigestSignature$MD5WithRSAEncryption)


et j'ai également essayé :
Signature sig = Signature.getInstance("SHA1WITHRSA");
sig.initVerify(certificate2.getPublicKey());
boolean verifies = sig.verify(signature);


où boolean ressort à false (mais j'avoue avoir des doutes sur cet algo).

Si quelqu'un avait une petite idée pour me décoincer

Merci d'avance !