Requete sql qui marche 1fois/x sans modif
Résolu
IvyAlice
Messages postés
379
Date d'inscription
Statut
Membre
Dernière intervention
-
IvyAlice Messages postés 379 Date d'inscription Statut Membre Dernière intervention -
IvyAlice Messages postés 379 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Requete sql qui marche 1fois/x sans modif
- Site x - Guide
- Sites X : Pornhub, YouPorn et Redtube sont de nouveau accessibles en France - Guide
- Photoscape x - Télécharger - Retouche d'image
- Direct x - Télécharger - Pilotes & Matériel
- Photofiltre studio x - Télécharger - Retouche d'image
6 réponses
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.
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
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
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
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
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().
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
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).