PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 18/02/2011 12:53:00

Nico
Membre

pgcrypto et changement de SGBD

Bonjour,

Pour ma petite base d'utilisateurs, j'envisage de crypter les mots de passe (en non réversible).

Je pensais utiliser la contrib pgcrypto de la manière suivante :

-- Mise à jour du nouveau champ pwd_crypt pour les mots de passe cryptés
UPDATE users
  SET pwd_crypt = crypt(pwd, gen_salt('md5'));


Puis pour l'authentification, quelque chose comme :

SELECT *
  FROM users
  WHERE login = 'monlogin'
  AND pwd_crypt = crypt('mon mot de passe en clair', pwd_crypt);


Cela fonctionne bien, mais je m'interrogeais sur un point : si je décide un jour de changer de SGBD (non non ce n'est pas mon intention, mais je préfère prévoir wink), par exemple pour passer à MySQL, comment puis-je conserver mon système d'authentification avec mes mots de passe cryptés ? Existe-t-il des librairies équivalentes adaptables à d'autres SGBD ?
Idem si j'utilise un autre algo comme BlowFish à la place de md5...


Merci,
Nico

Hors ligne

#2 18/02/2011 12:59:26

Marc Cousin
Membre

Re : pgcrypto et changement de SGBD

Les fonctions utilisées par pg_crypto sont standard (md5, blowfish, etc…). Aucune idée de ce qui est implémenté dans MySQL par contre…
D'après leurs docs, ils en ont quand même un certain nombre. http://dev.mysql.com/doc/refman/5.5/en/ … tions.html

Ça ne sera, à mon avis, pas le plus gros problème que vous aurez si vous passez à MySQL plus tard. Ça risque plutôt d'être les problèmes d'intégrité de données, de non conformités SQL, etc…


Marc.

Hors ligne

#3 25/02/2011 13:06:01

Nico
Membre

Re : pgcrypto et changement de SGBD

J'ai effectué quelques tests entre PG et MySQL, les chaînes cryptées avec l'algo md5 ou DES en Postgres sont bien utilisables en MySQL avec la fonction encrypt(), par contre, je n'ai pas réussi à obtenir le même résultat entre PG et MySQL avec l'algo BlowFish ou XDES...

exemples :

pg=# SELECT crypt('test', gen_salt('md5'));
               crypt
------------------------------------
 $1$ymR4H7RQ$AKZlNgruvwuqY6GHN18tM1
(1 ligne)

mysql> SELECT encrypt('test', '$1$ymR4H7RQ$AKZlNgruvwuqY6GHN18tM1');
+-------------------------------------------------------+
| encrypt('test', '$1$ymR4H7RQ$AKZlNgruvwuqY6GHN18tM1') |
+-------------------------------------------------------+
| $1$ymR4H7RQ$AKZlNgruvwuqY6GHN18tM1                    |
+-------------------------------------------------------+
1 row in set (0.00 sec)

=> ok smile



pg=# SELECT crypt('test', gen_salt('bf'));
                            crypt
--------------------------------------------------------------
 $2a$06$mPgR6FYOoUDrnzBZrlqmGeIQGE.Li6DF3IuWx82fX7o0nLIZhNlQS
(1 ligne)


mysql> SELECT encrypt('test', '$2a$06$mPgR6FYOoUDrnzBZrlqmGeIQGE.Li6DF3IuWx82fX7o0nLIZhNlQS');
+---------------------------------------------------------------------------------+
| encrypt('test', '$2a$06$mPgR6FYOoUDrnzBZrlqmGeIQGE.Li6DF3IuWx82fX7o0nLIZhNlQS') |
+---------------------------------------------------------------------------------+
| $2rcByx51ejoM                                                                   |
+---------------------------------------------------------------------------------+
1 row in set (0.00 sec)

=> pas ok sad

Hors ligne

Pied de page des forums