[RESOLU] openssl_encrypt et bdd

Eléphanteau du PHP | 29 Messages

16 sept. 2018, 14:06

Bonjour,

J'avoue m'arracher les yeux depuis hier et je pense que je finis par ne plus voir l'évidence... Je fais du coup appel à vous, car mes recherches ne donnent rien.

J'essaie d'utiliser openssl_encrypt (et donc decrypt), sans y parvenir, et je rencontre deux problèmes.
Je précise que je cherche à décrypter le mot de passe pour l'utiliser ailleurs (le mot de passe d'accès à mon site étant lui chiffré de manière irréversible)

- Premier problème, openssl_decrypt ne me renvoie pas le mot de passe d'origine lorsque je décrypte dans la même fonction que celle qui fait le cryptage. Pire, il me renvoie mon uniqueid !
- Second problème, si j'injecte le tout dans la bdd, alors il ne décrypte plus rien (je suppose un problème d'encodage ? Mais je n'ai pas vraiment la main dessus ? Le champ de la bdd est en utf8_unicode_ci.

Le code :

-- Dans mon profile.php :

Code : Tout sélectionner

if ($geocaching_password !== '') { // GC password has been entered $gc_uniqueid = $req_sql -> create_uniqueid(); $new_gc_password = $user -> encrypt_gc_password($new_password, $gc_uniqueid); $upd_pwd = $user -> update_gc_password($gc_uniqueid, $new_gc_password); if ($upd_pwd === 0) { // Update error $error -> add_error($page['Gc_pwd_update_error']); } $Original_pwd = $user -> decrypt_gc_password($gc_uniqueid, $new_gc_password); echo 'pass : '.$Original_pwd; }
-- Dans mon class_user.php :

Code : Tout sélectionner

function encrypt_gc_password($uniqueid, $new_password) { $iv; $encrypted; $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); //$iv = 'pksuchqkjfdsfdfs'; $encrypted = openssl_encrypt($new_password, 'aes-256-cbc', $uniqueid, 0, $iv); echo 'original : '. openssl_decrypt($encrypted, 'aes-256-cbc', $uniqueid, 0, $iv) . '<br />'; return base64_encode($encrypted . '::' . $iv); } function decrypt_gc_password($uniqueid, $garble) { echo base64_decode($garble) . '<br />'; list($encrypted_data, $iv) = explode('::', base64_decode($garble), 2); echo $encrypted_data . '<br />'; echo $iv . '<br />'; return openssl_decrypt($encrypted_data, 'aes-256-cbc', $uniqueid, 0, $iv); }
Le résultat des echo :
original : 308d3f59ab125d2e8a6d9735c3b122939038439c
0EC5Lrh2jFYGWuohld5BMv+5gcxrYM1BY3kdPPHAhqMseC5/uRBv8ubdeZT2Vq0v::�W���0.��s̳I��
0EC5Lrh2jFYGWuohld5BMv+5gcxrYM1BY3kdPPHAhqMseC5/uRBv8ubdeZT2Vq0v
�W���0.��s̳I��
pass :
Pouvez-vous m'aider ? N'hésitez pas si besoin d'informations complémentaires pour me décoincer.

Merci :)

Eléphanteau du PHP | 29 Messages

16 sept. 2018, 14:29

(Premier problème : à force d'essai j'ai inversé password et uniqueid dans l'appel de la fonction... Par contre maintenant le premier echo ne renvoie plus rien...)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 7743 Messages

16 sept. 2018, 14:50

Bonjour,

Mon premier conseil serait tout de suite d'arrêter d'utiliser echo mais uniquement var_dump()
C'est pas grand chose mais ça limitera le risque de mauvais debug en évitant l'affichage HTML de tes variables à debuguer.

Ensuite pour trouver le problème, il faut que tu réussisses à faire un bout de code minimal qui reproduit le problème, sans appels de fonctions, juste le strict minimum en procédural, en assignant la valeur de tes variables au début et voir si ça fonctionne. (et ça nous ferra un exemple concret sur lequel on pourra t'aider aussi)
Si c'est le cas, alors tu ajoutes progressivement de la complexité jusqu'à mettre le doigt où ça bug. Ainsi ça évite les risque d'interactions avec les autres parties de ton code
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 7743 Messages

16 sept. 2018, 14:59

Voila une librairie qui fait exactement ce que tu essayes de faire, à voir si tu penses qu'il y a des choses à reprendre ou si tu préfères l'intégrer directement :
https://github.com/ioncube/php-openssl- ... ryptor.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 29 Messages

16 sept. 2018, 16:37

Merci pour la réponse.

Je note pour var_dump. Je connais et pourtant je ne pense pas à l'utiliser. Je vais faire évoluer ça...

Et pour mon problème.... tout fonctionnait bien.
J'ai tourné en rond dans tous les sens, et ai fini par m'apercevoir que je ne passais pas la bonne variable comme mot de passe.
Une fois modifié plus de problème, erreur idiote.

Merci d'avoir pris le temps pour me répondre, et du coup sorry d'avoir posté pour rien :(