Exactement, généralement on le transfert pas, mais on set le même des deux côtés.
Exactement, généralement on le transfert pas, mais on set le même des deux côtés.
C'est bon, grâce à l'IV correctement initialisé, ça fonctionne. Il fallait le câbler correctement côté PHP puis côté C++/OpenSSL.
Maintenant, c'est ma signature RSA qui ne fonctionne pas. Bien signé avec la clef privée, impossible de vérifier côté C++ avec la clef publique, grrrrrr....
Tu fais le contrôle manuellement ?
Si c'est le cas, il te faut hasher exactement les mêmes données des deux côtés sans inclure la signature.
Envoie :
hash(text) -> signaturePriv(hash)
Réception :
hash(text) // sans la signature
déchiffrement de la signature reçu avec clé pub
comparaison des deux hash, ils doivent être égaux.
C'est peut-être là le problème...
J'ai text qui n'est pas gros du tout, donc pas de hash !
Envoie : Signature du texte non encodé
signaturePriv(text)
Réception : Vérification de la signature
Verify(text,sign_recu)
Et la fonction vérifie me retourne 0. Le verifie ne demande-t-il pas "binaire qui a généré la signature + signature + clef publique) pour vérifier que tout est OK ?
La signature est un hash chiffré par la clé privé.
Essaye de comparer les deux textes, si tu as un seul bit qui change c'est foutu, donc peut-être un espace à la fin. Un caractère '\0' ?
Non, c'est du binaire, 32 octets, et exactement identique !
Peut-être le mode de signature ou des algos différent...
Est-ce obligatoire ? Il faut obligatoirement faire un hash des données ? J'ai 32 octets, le hash me prendra plus de place.
OpenSSL me retourne l'erreur suivante : "Block type is not 01".
Tu as une idée ? Ou il faut que j'encode dans ma licence avec "data" + "hash data" + "sign(hash data)" ?
Quel peut être la différence entre CRYPT_RSA_SIGNATURE_PKCS1 et CRYPT_RSA_SIGNATURE_PSS ?
Si je signe avec le mode CRYPT_RSA_SIGNATURE_PKCS1 j'obtiens algorithm mismatch !
Je rappelle qu'en chargeant la clef publique, je suis bien en mesure de décoder la signature au sein de PHP mais pas en C++ avec la librairie OpenSSL.
Grrrrrrrrr
Bon, avec l'aide d'un ami j'ai (ou plutôt il a) trouvé.
Coté php il faut initialiser la fonction de hachage à utiliser. De même côté C++ avec OpenSSL, il faut lui passer le hash des données en clair et non pas les données elles mêmes
Reste un souci: comment assigner sous OpenSSL la structure RSA (clef publique) avec la clef plain text ? RSA sait facilement charger une clef contenue dans un fichier mais si je décide de mettre la clef directement dans le programme (ce qui évite d'avoir un fichier supplémentaire à balader) je ne sais pas comment en extraire les données pour initialiser la clef RSA.
En fait PEM_read_RSA_PUBKEY prend un FILE * en entrée et moi je voudrais initialiser RSA directement avec le contenu du FILE *
Une idée ? Un bout de code ?
EDIT : je post cette question dans un nouveau thread, je passe le sujet en résolu, et merci encore !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager