2012-05-09 2 views
1

En utilisant PHP 5.2.4 et le module OpenSSL 0.9.8g Je suis en train de créer un signé digérerQuelle version de OpenSSL est nécessaire pour signer avec sha256WithRSAEncryption

openssl_sign($stuff, $signeddigest, $key, 'sha256WithRSAEncryption'); 

Hélas signeddigest $ est retourné vide et je reçois pas les erreurs.

Si vous ne spécifiez pas l'algorithme 'sha256WithRSAEncryption', un résumé signé est renvoyé en utilisant l'algorithme par défaut.

Le même code fonctionne correctement sur PHP 5.3.10 et OpenSSL 1.0.0g. L'algorithme 'sha256WithRSAEncryption' n'est-il pas supporté dans OpenSSL 0.9.8g?

+0

Pourriez-vous voir ce que 'openssl_get_md_methods' renvoie? Pourriez-vous essayer une constante entière à la place de la chaîne "sha256WithRSAEncryption"? Il semble que l'API a soudainement accepté des chaînes pour certaines raisons, ce qui ne semble pas documenté dans l'API ... –

+0

openssl_get_md_methods() revient comme non défini. Si j'essaie d'utiliser une constante entière seulement 1 à 4 concerne les algorithmes mis en œuvre - je m'attendais à ce que 'sha256WithRSAEncryption' soit lié à l'index 47. –

Répondre

7

Un bon ami est venu avec une solution de contournement pour utiliser sha256WithRSAEncryption sur un ancien module PHP 5.2.4 et OpenSSL 0.9.8g.

En utilisant les informations disponibles à http://www.di-mgt.com.au/rsa_alg.html il m'a écrit l'extrait suivant:

function my_openssl_sign($data, &$signature, $priv_key_id, $signature_alg = 'sha256WithRSAEncryption') { 
    $pinfo = openssl_pkey_get_details($priv_key_id); 
    $hash = hash('sha256', $data); 
    $t = '3031300d060960864801650304020105000420'; # sha256 
    $t .= $hash; 
    $pslen = $pinfo['bits']/8 - (strlen($t)/2 + 3); 

    $eb = '0001' . str_repeat('FF', $pslen) . '00' . $t; 
    $eb = pack('H*', $eb); 

    return openssl_private_encrypt($eb, $signature, $priv_key_id, OPENSSL_NO_PADDING); 
} 

Merci, Mads, vous êtes fait génialité!

+0

Wow, excellente solution. Avez-vous aussi une solution similaire pour openssl_ verify – svn

+0

Non, nous avions une configuration plus récente de ce côté du système. –

+0

En fait, je l'ai trouvé en ligne: https://code.google.com/p/nemid-php/source/browse/trunk/lib/Nemid.php oeil à la classe Nemid52Compat c'est également writen par Mads – svn

Questions connexes