Requete sql qui marche 1fois/x sans modif
Résolu/Fermé
IvyAlice
Messages postés
379
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
14 septembre 2013
-
Modifié par IvyAlice le 30/08/2011 à 14:53
IvyAlice Messages postés 379 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 14 septembre 2013 - 30 août 2011 à 17:15
IvyAlice Messages postés 379 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 14 septembre 2013 - 30 août 2011 à 17:15
A voir également:
- Requete sql qui marche 1fois/x sans modif
- Pourquoi les sites x ne marche plus - Forum Réseaux sociaux
- Debloquer acces sites adultes sur iphone ✓ - Forum iPhone
- Direct x runtime - Télécharger - Pilotes & Matériel
- Nouvelle partie pokemon x ✓ - Forum DS
- %X en c ✓ - Forum C
6 réponses
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
30 août 2011 à 15:27
30 août 2011 à 15:27
hummm, pour la requête, ça serait pas plutôt ?
Car toi tu passes Password='123456' a encrypt().
Je pense que ton problème vient de la.
SELECT User FROM user WHERE ( (User='Chewbacca') AND ( Password=encrypt('123456') ) );
Car toi tu passes Password='123456' a encrypt().
Je pense que ton problème vient de la.
IvyAlice
Messages postés
379
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
14 septembre 2013
32
30 août 2011 à 16:20
30 août 2011 à 16:20
Salut ZEp3k!Gn0,
Merci pour ta réponse.
j'ai essayé ça (pour faire simple pour commencer):
Mais là de nouveau il m'a retourné 0 entrée.
Ivy
Merci pour ta réponse.
j'ai essayé ça (pour faire simple pour commencer):
SELECT User FROM user WHERE Password=ENCRYPT('123456');
Mais là de nouveau il m'a retourné 0 entrée.
Ivy
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
Modifié par Zep3k!GnO le 30/08/2011 à 16:33
Modifié par Zep3k!GnO le 30/08/2011 à 16:33
Après faut voir comment t'as inséré tes user, t'as utilisé quoi pour les encrypter ?
Pour l'inspiration : https://www.howtoforge.com/community/threads/php-authentication-with-mysql-encrypt-function.17804/
https://forum.hardware.fr/hfr/Programmation/PHP/mysql-decrypter-resolu-sujet_47394_1.htm
Pour l'inspiration : https://www.howtoforge.com/community/threads/php-authentication-with-mysql-encrypt-function.17804/
https://forum.hardware.fr/hfr/Programmation/PHP/mysql-decrypter-resolu-sujet_47394_1.htm
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
30 août 2011 à 16:26
30 août 2011 à 16:26
Bonjour,
D'après la doc mysql :
Comment dire... Ça n'a vraiment pas l'air d'être une bonne idée d'utiliser cette fonction, surtout sans mettre un deuxième argument salt...
Xavier
D'après la doc mysql :
ENCRYPT(str[,salt]) Encrypts str using the Unix crypt() system call and returns a binary string. The salt argument must be a string with at least two characters or the result will be NULL. If no salt argument is given, a random value is used. mysql> SELECT ENCRYPT('hello'); -> 'VxuFAJXVARROc' ENCRYPT() ignores all but the first eight characters of str, at least on some systems. This behavior is determined by the implementation of the underlying crypt() system call. The use of ENCRYPT() with the ucs2, utf16, or utf32 multi-byte character sets is not recommended because the system call expects a string terminated by a zero byte. If crypt() is not available on your system (as is the case with Windows), ENCRYPT() always returns NULL.
Comment dire... Ça n'a vraiment pas l'air d'être une bonne idée d'utiliser cette fonction, surtout sans mettre un deuxième argument salt...
Xavier
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié par Reivax962 le 30/08/2011 à 16:32
Modifié par Reivax962 le 30/08/2011 à 16:32
En fait ce qui se passe, c'est que sans le salt, il prend un salt au hasard. J'imagine que ce « hasard » se fait en initialisant toujours à 0 la graine de la fonction de hasard.
En conséquence de quoi, à chaque fois que tu ouvres une nouvelle session MySQL, il va reprendre les mêmes salt dans le même ordre.
Pour illustrer, un petit exemple, avec en italique ce que rajoute implicitement MySQL :
-> Session MySQL 1 : insertion en base :
INSERT INTO ...... Password=encrypt('123456', 'salt_1')
-> Session MySQL 2 : test de connexion :
1 - SELECT User FROM user WHERE Password=ENCRYPT('123456', 'salt_1')
--- résultat OK !
2 - SELECT User FROM user WHERE Password=ENCRYPT('123456', 'salt_2')
--- résultat KO !
3 - SELECT User FROM user WHERE Password=ENCRYPT('123456', 'salt_3')
--- résultat KO !
...
-> Session MySQL 3 : nouveaux tests de connexion :
1 - SELECT User FROM user WHERE Password=ENCRYPT('123456', 'salt_1')
--- résultat OK !
2 - SELECT User FROM user WHERE Password=ENCRYPT('123456', 'salt_2')
--- résultat KO !
3 - SELECT User FROM user WHERE Password=ENCRYPT('123456', 'salt_3')
--- résultat KO !
...
et ainsi de suite...
Xavier
En conséquence de quoi, à chaque fois que tu ouvres une nouvelle session MySQL, il va reprendre les mêmes salt dans le même ordre.
Pour illustrer, un petit exemple, avec en italique ce que rajoute implicitement MySQL :
-> Session MySQL 1 : insertion en base :
INSERT INTO ...... Password=encrypt('123456', 'salt_1')
-> Session MySQL 2 : test de connexion :
1 - SELECT User FROM user WHERE Password=ENCRYPT('123456', 'salt_1')
--- résultat OK !
2 - SELECT User FROM user WHERE Password=ENCRYPT('123456', 'salt_2')
--- résultat KO !
3 - SELECT User FROM user WHERE Password=ENCRYPT('123456', 'salt_3')
--- résultat KO !
...
-> Session MySQL 3 : nouveaux tests de connexion :
1 - SELECT User FROM user WHERE Password=ENCRYPT('123456', 'salt_1')
--- résultat OK !
2 - SELECT User FROM user WHERE Password=ENCRYPT('123456', 'salt_2')
--- résultat KO !
3 - SELECT User FROM user WHERE Password=ENCRYPT('123456', 'salt_3')
--- résultat KO !
...
et ainsi de suite...
Xavier
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié par Reivax962 le 30/08/2011 à 16:42
Modifié par Reivax962 le 30/08/2011 à 16:42
Donc, solution :
Soit tu utilises cette fonction, si tu es sûr de ne pas avoir d'encodages complexes (UTF16 & co.), en spécifiant un salt bien défini, et toujours le même.
Du coup tes requêtes seraient un truc de ce genre :
INSERT INTO ...... Password=encrypt('123456', 'abcd')
SELECT User FROM user WHERE Password=ENCRYPT('123456', 'abcd')
Soit tu utilises une autre fonction, par exemple md5().
Soit tu utilises cette fonction, si tu es sûr de ne pas avoir d'encodages complexes (UTF16 & co.), en spécifiant un salt bien défini, et toujours le même.
Du coup tes requêtes seraient un truc de ce genre :
INSERT INTO ...... Password=encrypt('123456', 'abcd')
SELECT User FROM user WHERE Password=ENCRYPT('123456', 'abcd')
Soit tu utilises une autre fonction, par exemple md5().
IvyAlice
Messages postés
379
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
14 septembre 2013
32
30 août 2011 à 16:33
30 août 2011 à 16:33
Bonjour Xavier,
Merci pour ta réponse.
Ce n'est peut-être pas la fonction qui répond à mes besoins finalement :-/
En fait j'ai mis dans Password les mots de passe avec "IDENTIFIED BY" ce qui fait qu'ils sont crypté automatiquement par sql (ça donne une chaine de 41 caractères dont le premier est une étoile)
ensuite, pour dire si l'utilisateur peut se logger ou non je souhaite comparer le mot de passe qu'il y entré avec celui contenu dans la base, mais en le cryptant (sinon évidemment, 123456 ne sera pas égal à *aklsjdfsioualjsdfvhadkl7sdfhha8wsk5ldj44 )
j'ai pas encore trouvé de solution qui marche
Ivy
Merci pour ta réponse.
Ce n'est peut-être pas la fonction qui répond à mes besoins finalement :-/
En fait j'ai mis dans Password les mots de passe avec "IDENTIFIED BY" ce qui fait qu'ils sont crypté automatiquement par sql (ça donne une chaine de 41 caractères dont le premier est une étoile)
ensuite, pour dire si l'utilisateur peut se logger ou non je souhaite comparer le mot de passe qu'il y entré avec celui contenu dans la base, mais en le cryptant (sinon évidemment, 123456 ne sera pas égal à *aklsjdfsioualjsdfvhadkl7sdfhha8wsk5ldj44 )
j'ai pas encore trouvé de solution qui marche
Ivy
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
30 août 2011 à 16:43
30 août 2011 à 16:43
OK, alors c'est la fonction PASSWORD() que tu veux.
https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_password
https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_password
PASSWORD(str) Calculates and returns a password string from the plaintext password str and returns a string, or NULL if the argument was NULL. This is the function that is used for encrypting MySQL passwords for storage in the Password column of the user grant table. As of MySQL 5.5.3, the return value is a nonbinary string in the connection character set. Before 5.5.3, the return value is a binary string. mysql> SELECT PASSWORD('badpwd'); -> '*AAB3E285149C0135D51A520E1940DD3263DC008C' PASSWORD() encryption is one-way (not reversible).
IvyAlice
Messages postés
379
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
14 septembre 2013
32
30 août 2011 à 17:15
30 août 2011 à 17:15
Ah oui !
PASSWORD marche!
Je suis désolée de t'avoir pris ton temps, je n'avais pas trouvé cette fonction (sûrement que j'avais pas entrer les bons mots-clefs)
En tout cas je l'ai essayé et ça marche ni-kel =)
Merci encore, et bonne soirée
PASSWORD marche!
Je suis désolée de t'avoir pris ton temps, je n'avais pas trouvé cette fonction (sûrement que j'avais pas entrer les bons mots-clefs)
En tout cas je l'ai essayé et ça marche ni-kel =)
Merci encore, et bonne soirée