IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

D�chiffrement � l'aide d'une cl� publique


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    51
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 51
    Par d�faut D�chiffrement � l'aide d'une cl� publique
    Bonjour
    Je ouhaite securis� sur mon site internet le paiement en ligne.
    Je passe aujourd'hui par l'interface de paybox. Pour m'assurer qu'une personne n'est pas un intru, je dois d�chiffrer une phrase � l'aide d'une cl� publique fournit par Paybox.

    Mais je ne sais absolument pas comment la d�chiffrer. Voici ce que disent les sp�cifications techniques de paybox:

    1) R�cup�rer le contenu de la donn�e du type �K�,
    2) �URL d�cod�e� cette signature,
    3) D�cod�e en base 64 le r�sultat de l��tape pr�c�dente,
    4) D�crypter avec la cl� publique de PAYBOX le r�sultat de l��tape pr�c�dente,
    5) Calculer une empreinte SHA-1 avec les autres donn�es de la variable � PBX_RETOUR �,
    6) L�empreinte calcul�e dans l��tape pr�c�dente doit �tre �gale au r�sultat de l��tape 4.
    Et voila ce que j'ai mis comme code, mais qui ne fonctionne pas :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // recuperation de la signature + decodage
    $sign = urldecode($_GET["sig"]);
    // decodée en base 64 le résultat de $sign
    $decode = base64_decode($sign);
     
    //Decrypter avec la clé publique de paybox $decode
    $fp=fopen ("/home/chemin/pubkey","r");
    $pub_key=fread ($fp,8192);
    //openssl_pkey_get_public ($pub_key);
    $t = openssl_public_decrypt ($decode,$finaltext,$pub_key);
    echo "<hr>".$finaltext; fclose($fp);
    Auriez vous une id�e? Les sp�cifications ne sont pas tr�s claire nan? auriez vous d�j� effectu� ce type de travail?

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par d�faut
    Quand tu dis que ca ne fonctionne pas tu peux etre plus pr�cis? Parce que l� tu ne compares pas l'�tape 4 avec l'�tape 6 donc je suppose que c'est pas le "r�sultat" l'erreur mais plutot une fonction qui n'existe pas, qui n'affiche rien ou quelquechose de ce style?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    51
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 51
    Par d�faut
    Effectivement, je viens de voir que je n'avais pas mis tous mon code....
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    // recuperation de la signature + decodage
    	$sign = urldecode($_GET["sig"]);
    	echo $sign;
    // decodée en base 64 le résultat de $sign
    	$decode = base64_decode($sign);
    	echo "<hr>".$decode;
    //Decrypter avec la clé publique de paybox $decode
    	$fp=fopen ("/home/placeoje/pubkey","r");
    	$pub_key=fread ($fp,8192);
    	//openssl_pkey_get_public ($pub_key);
    	$t = openssl_public_decrypt ($decode,$finaltext,$pub_key,OPENSSL_PKCS1_PADDING);
    	echo "<hr>".$finaltext;
    	fclose($fp);
     
    // calcul de l'empreinte SHA1 :
    	$val = "montant=".$_GET["montant"]."&auto=".$_GET["auto"]."&ref=".$_GET["ref"]."&trans=".$_GET["trans"];
    	echo "<hr>".sha1($val);
    Valeur r�cup�re dans l'url:
    Code X : S�lectionner tout - Visualiser dans une fen�tre � part
    montant=1290&auto=XXXXXX&ref=Macommande3&trans=630198477&sig=JcisAF63EEGGYGnHSMdXhQ2oTXUBNnnPUPNiOTgNMW8y7cD9rVrOke7n2GDHsesgtVWGDkg5yPlgihEBAkDXyDTAFUEA%2BkVv5fZM0P2eMr2yIOX2mTQExnm3aj3UGnJ6VwuQRd5PmoE%2F6Yji0FkjbcAAerSEXnCQKkgU8XKR6Ck%3D
    Valeur d�cod� de $sign en base 64 ($decode):
    Code X : S�lectionner tout - Visualiser dans une fen�tre � part
    %Ȭ�^�A�`i�H�W� �Mu6y�P�b98 1o2���*ZΑ���`DZ� �U�H9��`�@��4�A��[�}�4?g��l�9}�M1�mڏu�����w�� O�b8�H�p�*!�$ �<\�z
    Valeur renvoy� par $finaltext
    Code X : S�lectionner tout - Visualiser dans une fen�tre � part
    �NM0tE ���4�%��������?62Y��6̵��Z� 쇳�D@>$�{�|k[.�ߺ��|ۺ������k�²��6]�j���a�%���Ի(�\�Mp�eV��d������G)���;��
    Valeur du SHA1:
    b05060b4f609f3a4928625a0815db91bc83f4c72

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    51
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 51
    Par d�faut
    Bon, un petit coup de fil au service technique (bravo pour la rapidit�)
    et voil� la solution:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    		// ouverture de la clé publique Paybox
    		$fp = $filedata = $key = FALSE;                         // initialisation variables
    		$fsize =  filesize('/home/placeoje/pubkey');            // taille du fichier
    		$fp = fopen('/home/placeoje/pubkey', 'r' );             // ouverture fichier
    		$filedata = fread( $fp, $fsize );                       // lecture contenu fichier
    		fclose( $fp );                                          // fermeture fichier
    		$key = openssl_pkey_get_public( $filedata );        	// recuperation de la cle publique
     
    		$first = strpos($_SERVER['REQUEST_URI'],'?');			// recherche le ?
    		$qrystr = substr($_SERVER['REQUEST_URI'], $first+1); 					// recupere les variables passées en parametres
    		$pos = strrpos( $qrystr, '&' );							// cherche dernier separateur
    		$data = substr( $qrystr, 0, $pos ); 					// recupere les variables non codées
    		$pos= strpos( $qrystr, '=', $pos ) + 1;                 // cherche debut valeur signature
    		$sig = substr( $qrystr, $pos );                         // et voila la signature
    		$sig = base64_decode( urldecode( $sig ));               // decodage signature
    		$t = openssl_verify( $data, $sig, $key ); 
    // si t=0 => pas autorisé si t=1 autorisé

  5. #5
    Membre confirm� Avatar de fadex
    Inscrit en
    Septembre 2005
    Messages
    223
    D�tails du profil
    Informations personnelles :
    �ge : 43

    Informations forums :
    Inscription : Septembre 2005
    Messages : 223
    Par d�faut
    merci tu ma sauver

  6. #6
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Par d�faut Ne pas utiliser urldecode avec $_GET !
    Bonjour,

    effectivement, le code fourni par PayBox ne peut pas marcher dans tous les environnements : il ne faut pas utiliser un urldecode avec un $_GET :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    <?php
    // BAD CODE! DO NOT USE!
    $term = urldecode($_GET['sterm']);
    ?>
    http://us3.php.net/manual/en/functio...code.php#48481

    En effet, si "magic quotes" est activ�, $_GET urldecode d�j� les caract�res sp�ciaux...

    La bonne m�thode consiste � utiliser $_SERVER['REQUEST_URI'] et vous �tes s�r de ne pas urldecoder 2 fois vos variables.

    C'est quand m�me incroyable que le code fourni par des fournisseurs de services e-commerce produise des bugs...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Besoin d'aide pour une Requ�te SQL ...
    Par Kokito dans le forum Requ�tes
    R�ponses: 2
    Dernier message: 07/07/2004, 11h56
  2. Aide pour une requete ... "COUNT(*)"
    Par mechantebestiole dans le forum Langage SQL
    R�ponses: 13
    Dernier message: 25/05/2004, 16h27
  3. besoin d'aide pour une requ�te
    Par Damien69 dans le forum Langage SQL
    R�ponses: 11
    Dernier message: 31/03/2004, 15h38
  4. Aide sur une requete de s�lection
    Par stephdiplo150 dans le forum Langage SQL
    R�ponses: 4
    Dernier message: 16/01/2004, 10h40
  5. Aide sur une fenetre
    Par Ray-j dans le forum Autres �diteurs
    R�ponses: 4
    Dernier message: 29/11/2002, 08h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo