Page 1 sur 3

AES_ENCRYPT et AES_DECRYPT

Posté : 21 oct. 2005, 00:11
par Invité
J ai lu l'exemple sur le forum en le comparant avec la documentation:

l'exemple:
 
$sql = "SELECT AES_DECRYPT(mdp,'". $cle_cryptage ."') FROM membres WHERE pseudo = '". $pseudo ."';";  
jusquau la c bien, alors dans la documentation du MYSQL:
INSERT INTO t VALUES (1,AES_ENCRYPT("text","password")); 

Vous pouvez obtenir encore plus de sécurité en évitant de transférer la clé pour chaque requête, en la stockant dans une variable sur le serveur au moment de la connexion : 

SELECT @password:="my password"; 
INSERT INTO t VALUES (1,AES_ENCRYPT("text",@password)); 
 
la bonne methode d'inserer le mot de passe (my password) c dutiliser @password, mais est ce kon l utilise comme cite dans l'exemple:

SELECT @password:="my password"; 
INSERT INTO t VALUES (1,AES_ENCRYPT("text",@password));  
[/php]

Posté : 21 oct. 2005, 08:58
par Cyrano
Voici un exemple de fonctionnement :

Code : Tout sélectionner

Encryptage: ¯¯¯¯¯¯¯¯¯¯¯ SELECT @cle:='chiffrement'; SELECT @mdp:='abc123yz'; INSERT INTO membre( `mem_nom` , `mem_prenom` , `mem_adr_1` , `mem_ville` , `mem_cp` , `mem_nl` , `mem_pseudo` , `mem_mdp` ) VALUES ( 'Vabo', 'Louis-Anatole', '1 rue Béole', 'Labatoutobou', '75020', 'Lavabo', AES_ENCRYPT(@mdp, @cle)); Décryptage: ¯¯¯¯¯¯¯¯¯¯¯ SELECT @cle := 'chiffrement'; SELECT AES_DECRYPT( `mem_mdp` , @cle ) AS mdp_clair FROM `membre` WHERE mem_id =1

Posté : 21 oct. 2005, 21:12
par bunk
Bonsoir,

et pour un update ca fonctionne comment ?

Merci

Posté : 21 oct. 2005, 22:32
par Cyrano
De la même manière : remplace le INSERT ou le SELECT par UPDATE et place le cryptage du mot de passe comme tu aurais placé les valeurs de remplacement.

Code : Tout sélectionner

SELECT @cle:='chiffrement'; SELECT @mdp:='abc123yz'; UPDATE `membre` SET `mdp` = AES_ENCRYPT(@mdp, @cle);
Tu peux remplacer les valeurs affectées au variable SQL @cle et/ou @mdp par des variables PHP, ce qui donnerait:
$sql  = "SELECT @cle:='". $cle ."';";
$sql .= "SELECT @mdp:='". $mdp ."';"; 
$sql .= "UPDATE `membre`
SET `mdp` = AES_ENCRYPT(@mdp, @cle);"
$miseajour = mysql_query($sql);
// etc...

Posté : 22 oct. 2005, 00:45
par bunk
chez moi il ne comprend pas certaines choses notemment :
//$sql  = "SELECT @cle:='". $cle ."';";
//$sql .= "SELECT @mdp:='". $mdp_aj ."';";
donc si je remplace en dur comme ca :
$sql .= "UPDATE gesten_utilisateur 
SET NOM='$nom', PRENOM='$prenom', PSEUDO='$login_aj', MOT_DE_PASSE= AES_ENCRYPT('kk', 'kk'), MAIL='$mail' WHERE ID_UTILISATEUR='$id_utilisateur'";
ca passe.

C'est étonnant car dans phpmyadmin ca se passe bien si j'execute la requete que j'ai obtenue avec un echo, si je colle ca pour tester ca passe :
SELECT @cle:='kakalouette';SELECT @mdp:='aa';UPDATE gesten_utilisateur SET NOM='SS', PRENOM='Zz', PSEUDO='ee', MOT_DE_PASSE= AES_ENCRYPT(@mdp, @cle), MAIL='[email protected]' WHERE ID_UTILISATEUR= 31

Posté : 22 oct. 2005, 09:22
par Cyrano
Alors simplifie en une seule requête au lieu de trois:
$sql = "UPDATE `membre`
SET `mdp` = AES_ENCRYPT(". $mdp .", ". $cle .");"
$miseajour = mysql_query($sql);

Posté : 22 oct. 2005, 10:01
par bunk
Bonjour,

Ca fonctionne mais attention que comme ca :
// Requete pour la modification & cryptage de mdp_aj
$cle = "kakalouette";

$sql .= "UPDATE gesten_utilisateur 
SET NOM='$nom', PRENOM='$prenom', PSEUDO='$login_aj', MOT_DE_PASSE= AES_ENCRYPT('. $mdp_aj .', '. $cle .'), MAIL='$mail' WHERE ID_UTILISATEUR= $id_utilisateur ";
$req = mysql_query($sql) or die('Impossible de modifier l\'utilisateur'); 
Pour le DECRYPT il faut qu'il y'est un champ mdp_clair ou comment ca se passe ?

exemple :
$sql = "SELECT AES_DECRYPT('. $mdp .', '. $cle .') AS mdp_clair FROM gesten_utilisateur WHERE PSEUDO = '".$pseudo."'";
Merci de ton aide

Posté : 22 oct. 2005, 10:06
par Cyrano
Et si tu faisais le test ??? :shock: Tu obtiendras toi-même la réponse.

Posté : 22 oct. 2005, 10:22
par bunk
J'ai fais plusieurs test mais aparementpas les bons, avec ca il me retourne NULL
$sql = "SELECT AES_DECRYPT('. $mdp .', '. $cle .') AS MOT_DE_PASSE FROM gesten_utilisateur WHERE PSEUDO = '".$pseudo."'";

Posté : 22 oct. 2005, 10:27
par Cyrano
utilises-tu toujours la même clé ?

Posté : 22 oct. 2005, 10:39
par bunk
oui bien sur.

Posté : 22 oct. 2005, 10:41
par Cyrano
Alors je ne vois pas trop: tes variables sont correctement initialisées ?

Posté : 22 oct. 2005, 10:59
par bunk
c'est ce que j'étais en train de verifier et a priori mon erreur venait de la.

j'ai vidé ma table pour être sur et ca à l'air de passer maintenant

Correction

n'importe quel mot de passe est correct donc y'a une erreur quelque part

je vais continuer les test quand même

Merci

Posté : 22 oct. 2005, 11:07
par bunk
Ceci dit dans phpmyadmin la requète me donne toujours NULL
SELECT AES_DECRYPT('. mdp .', '. kakalouette .') AS MOT_DE_PASSE FROM gesten_utilisateur WHERE PSEUDO = 'test'

Posté : 22 oct. 2005, 11:26
par Cyrano
Dans phpMyAdmin, enlève les délimiteurs PHP:

Code : Tout sélectionner

SELECT AES_DECRYPT('mdp', 'kakalouette') AS MOT_DE_PASSE FROM gesten_utilisateur WHERE PSEUDO = 'test'