[SQL] Rajouter une colonne + opération

altergo
Invité n'ayant pas de compte PHPfrance

24 juil. 2010, 15:25

Bonjour!

J'ai actuellement ma base de donnée qui contient le login et mot de passe de mes utilisateurs inscrits, en md5.
J'aimerai rajouter une colonne dans cette table qui hash le mot de passe en sha1 (en plus du md5).
Je ne veux pas le faire à la main..!
Comment feriez-vous en sql pour qu'a chaque ligne il calcule le sha1 du mot de passe et le stoke dans la nouvelle colonne ?

Merci bcp.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 juil. 2010, 17:29

Quand tu dis "en plus du md5", tu veux dire que tu veux l'encrypter d'abord en md5, puis en sha1 ? ou bien garder le mdp que tu as en md5 et en avoir un second en sha ? (auquel cas je vois pas bien l'utilité en dehors d'avoir deux champs à mettre à jour lorsqu'il est modifié)

Dans le premier cas, un simple update de ta table avec un " ton_champ = sha(ton_champ)" devrait faire l'affaire :)

Dans le second cas, dans la mesure où le mot de passe que tu possèdes en base est crypté, le seul moment où tu peux obtenir le mdp non crypté, c'est lors de l'authentification de l'utilisateur. Tu peux donc créer une colonne supplémentaire dans ta table, et lorsque l'utilisateur se connecte, tu en profites pour encoder le mot de passe saisi en sha dans le second champ.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
AB
ViPHP | 5818 Messages

24 juil. 2010, 17:33

Une fois ta colonne "mot_de_passe_sha1" créée il te suffit de faire
$query = "UPDATE matable SET mot_de_passe_sha1 = sha1(mot_de_passe)";
$update = mysql_query($query) or die (mysql_error());
Mais ça suppose que ta colonne mot_de_passe soit en clair (non haschée en md5). Si tu n'as que les mots de passe en md5 tu ne peux pas trouver l'équivalent en sha1.

Bon ça c'est pour un update, par contre lors de l'insertion et bien tu peux faire pour le sha1 exactement comme tu fais avec le md5
$query = "INSERT INTO matable (pseudo,mot_de_passe_md5,mot_de_passe_sha1) VALUES ('".mysql_real_escape_string($_POST['peudo']."','".md5($_POST['pass'])."','".sha1($_POST['pass'])."')";

$insert = mysql_query($query) or die (mysql_error());

Petit nouveau ! | 5 Messages

24 juil. 2010, 22:23

salut,


en faisant
sha1($champs_password);
tu fais un hachage d'un md5 du mot de passe (et non pas du mot de passe lui même.

donc pour tester le password ou pour en inserer des nouveaux il faudra après faire
sha1(md5($mot_de_passe)); // pas très conventionnel mais pourquoi pas
sinon il y aura une incohérence entre les anciens hachés 2 fois (md5 puis sha1) et les nouveaux hachés directement en sha1 ...

altergo
Invité n'ayant pas de compte PHPfrance

25 juil. 2010, 13:10

Ok merci bcp !

Code : Tout sélectionner

$query = "UPDATE matable SET mot_de_passe_sha1 = sha1(mot_de_passe)";
fonctionne bien :)

Oui, en fait je veux faire un truc genre :

Code : Tout sélectionner

login password md5 sha1 ================================================ test mypassword md5(mypassword) sha1(mypassword)
et voilà j'ai résussi merci bien :)

ViPHP
AB
ViPHP | 5818 Messages

25 juil. 2010, 16:43

Maintenant que tu peux faire ce que tu veux, juste une petite remarque au passage :

Normalement on ne stock pas les mots de passes en clair en bdd.

- Par éthique car le mot de passe n'a pas à être connu de quiconque.
- Par sécurité aussi car si quelqu'un pirate ta base de données, il aura accès aux mots de passe de tous les membres inscrits. Et dans ce cas, en plus du souci causé sur ton site, cela peut causer des problèmes sur d'autres sites si l'on considère que de nombreux utilisateurs utilisent le même mot de passe pour différents sites.
- Par sécurité encore car pour stocker le mot de passe en clair en bdd (je veux dire sans hashage ou cryptage), il faut donc le transmettre en clair lors de l'inscription. Ce qui implique qu'il passe en clair donc sans protection dans les tuyaux du web.

Il y a quelques années, c'était une pratique assez courante d'enregistrer les mots de passe non hashés en bdd. Cela permettait entre autre de pouvoir renvoyer le mot de passe par mail si oublié par l'utilisateur. Mais la pratique actuelle à changé et c'est pour cette raison que si l'on perd son mot de passe, la plupart des sites en renvoient un nouveau.

Voilà c'était juste pour info :wink:

altergo
Invité n'ayant pas de compte PHPfrance

25 juil. 2010, 22:26

salut,
effectivement c'est une très mauvaise manip que de garder le clair..
en plus, je veux désormais utiliser sha1 car réputé plus sur que md5, et comme la sécurité me soucie, je vais bien sur virer le password en clair !
++