2010-12-15 49 views
1

Il semble que les fonctions openssl_sign et openssl_verify de PHP effectuent le hachage des données avant la signature, en raison des restrictions de taille, alors j'ai essayé de l'émuler sur la ligne de commande.Comment vérifier une signature via PHP créée sur la ligne de commande OpenSSL?

signature via OpenSSL:

echo "foo" | openssl dgst -sha1 -binary | openssl rsautl -inkey priv.pem -sign > sig.bin 

vérifier ensuite par PHP

$key = openssl_pkey_get_public('pub.pem'); 
$ver = openssl_verify("foo\n", file_get_contents('sig.bin'), $key, OPENSSL_ALGO_SHA1); 
// $ver always 0 

J'ai essayé de nombreuses combinaisons, des formes binaires et hexagonaux du hachage, avec et sans retour à la ligne de fuite, et même hachage avant de passer en fonction php

Répondre

0

Mes résultats sont que le signe et la vérification de PHP ne sont pas interopérables avec rsautl openssl -sign et -verify options. PHP semble ajouter quelques méta-données, (15 octets supplémentaires) bien que je ne sache pas ce que cela signifie.

Ma solution: J'utilise directement des fonctions de cryptage et de décryptage et je gère moi-même le hachage. De cette façon, l'option -verify de la ligne de commande est analogue à «décrypter avec une clé publique». De même -sign est analogue à « chiffrer avec la clé publique »

En fait, cette façon, vous pouvez définir votre propre format de signature, par exemple, y compris une date ainsi que le hachage

+0

le [pkeyutl] (http : //www.openssl.org/docs/apps/pkeyutl.html#) commande peut faire le hachage et la signature en une seule étape. –

+0

Merci, bien que mon installation de openssl (Mac) n'ait pas cet utilitaire – Tim