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 ???

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'