Crypter un champ en MD5 dans une base de donnée SQL - SQL/NoSQL - Programmation
Marsh Posté le 05-11-2007 à 20:55:59
j'imagine que tu es sous ORACLE.
Attention que ces package de crypto sous oracle ne sont que dispo à partir de la version 10g.
Sinon, tu as la possibilité d'intégrer des procédures stockées écrite en JAVA dans oracle pour faire la cryptographie.
Moi personnellement, j'ai adopté cette solution.
Marsh Posté le 06-11-2007 à 07:38:18
En faites on m'avait conseillé de rentré les n u plet a l'aide d'un programme Java au lieu de faire un fichier sql. Etant donné que j'ai deja une classe écrite qui transforme une chaine de caractère en md5, je pourrai très bien passer les requêtes pour remplir ma table par java. Je te l'accorde c'est simple comme ça, mais ça fait un peu bricolage héhé, c'est pas la solution la plus logique.
Je vais le faire en java alors tans pis, et parallelement je vais essayer de chercher les pack dont tu m'as parlé. Merci pour la réponse
Eva.
Marsh Posté le 06-11-2007 à 10:53:59
tes mots de passe sont stockés en clair dans ta base sql actuellement ? et tu voudrais les convertir pour assainir le truc ? Je dois donc comprendre qu'à l'avenir tu vas mettre les password au bon format c'est ca ?
La solution sale c'est de faire un SELECT id, password from table, et d'afficher ca dans un fichier texte genre :
UPDATE table set password = md5($password) where id = $id
ok c'est crade, mais ca marche
Marsh Posté le 06-11-2007 à 18:09:08
Et bien surtout avec cette solution il y aura toujours une transaction entre la base et la machine du mot de passe en claire, donc en plus niveau sécurité c'est pas vraiment le top.
Marsh Posté le 06-11-2007 à 18:16:47
Oui je me doute, mais ma question c'était aussi : c'est une opération de mise à jour unique, ou bien c'est un process qui va se répéter souvent ?
Si c'est une maj unique, tu le fais une fois et puis voilà t'effaces tout et tes passwords sont convertis... si c'est souvent vouais c'est pas la solution. D'ailleurs comment faire cohabiter deux types de données dans un même champ ? et comment les distinguer ?
Marsh Posté le 06-11-2007 à 19:01:39
En gros j'aimerai que ça se répète. J'aimerai que dès que j'insers un nouvelle accès, il me code directement en MD5 le champ password.
je n'aurai même plus les mot de passe en clair dans la base de donnée, uniquement les mot de passe crypté. A la limite je peux aussi garder les mdp en clair mais c'est pas indispensable.
Marsh Posté le 07-11-2007 à 10:16:39
ben insert into table foo = md5($foo) ? Tu causes de java et de triggers, c'est des notions que je connais pas, à mon avis ton soucis est trop avancé pour mes maigres connaissances ^^
Marsh Posté le 07-11-2007 à 15:46:04
ben tu peux faire effectivement écrire un trigger.
insert (login, pass) values ('magicbuzz', 'monpassenclair')
et le trigger "before insert" va t'encoder pass avant de l'inserrer effectivement.
=> t'as la garantie que l'encodage sera systématique.
par contre, comme indiqué, cela veut dire que ton mot de passe circule en clair entre ton application et ta base de données. selon le niveau de sécurité recherché, c'est pas forcément très heureux.
bon, après tu peux aussi travailler avec une connexion sécurisée SSL entre ton application et ta base, à ce moment tu t'en moques un peu... d'autant qu'il est de notoriété publique depuis 1991 que MD5 ne vaut absolument pas un clou rouillé tordu en ce qui concerne la sécurité.
Marsh Posté le 07-11-2007 à 16:24:12
Comment gérer des pass de manière sécurisée si md5 sux les loutres ?
Marsh Posté le 07-11-2007 à 16:26:20
en se documentant
http://fr.wikipedia.org/wiki/MD5
-- et du coup je corrige ce que j'ai dit : depuis 1996 on sait que c'est de la merde, et depuis 2004 on sait le cracker
Marsh Posté le 07-11-2007 à 18:17:53
Je dois faire ça dans le cadre d'un projet d'étude donc je ne recherche pas la sécurité sans faille mais juste a essayer de faire les choses un minimum proprement. Et en utilisant un trigger le problème reste le même. Lit mon premier poste MagicBuzz . Faire un trigger ok, mais l'encoder après avant peu importe le problème est la, comment encoder une chaine en md5 sous sql ?
Marsh Posté le 07-11-2007 à 19:02:05
Ben ouais, mais t'as jamais répondu à la question caché de "moi" dans le second post du topic : quel SGBD utilises-tu ? Et quel langage ?
Entre Oracle, DB2, SQL Server, MySQL, PostGreSQL et autres, y'en a pas deux qui utilisent la même syntaxe pour encrypter des données, pas forcément les mêmes algos, si encore c'est disponible.
Et pour la langage, idem.
Avec le lien Wiki que je t'ai filé, y'a l'algo pour encoder en MD5, donc à la limite, tu peux t'amuser à écrire ta propre librairie d'encodage.
Mais dis-nous déjà quels outils tu utilises, sans ça t'auras pas de réponse précise
Marsh Posté le 08-11-2007 à 11:03:48
En theorie faut crypter le MDP coté client/serveur de presentation voir serveur d'application, pas coté BDD (sauf si le serveur d'application et la BDD sont dans un sous reseau fermé et suposé inaccesible à un hacker).
Et pour authentifier c'est :
if (crypter(mdp_entree) == mdp_base) then mdp_ok = true
Marsh Posté le 08-11-2007 à 11:05:07
Evanok a écrit : Je dois faire ça dans le cadre d'un projet d'étude donc je ne recherche pas la sécurité sans faille mais juste a essayer de faire les choses un minimum proprement. Et en utilisant un trigger le problème reste le même. Lit mon premier poste MagicBuzz . Faire un trigger ok, mais l'encoder après avant peu importe le problème est la, comment encoder une chaine en md5 sous sql ? |
Le SQL ne sais pas crypter. C'est au language de prog de le faire.
En PHP c'est inclu, en Java y'a un package fait pour tres facile (en 1H tu fait le truc google compris), en .NET surement pareil que java, etc.
Marsh Posté le 08-11-2007 à 12:55:51
bah voila en gros on ne peut pas le faire directement par une requête sql. Donc ce que je vais faire je pense c'est tout simplement un petit programme en java pour administrer la bdd sql, au moins en java je n'aurai aucun problème .
Merci pour vos réponses.
Marsh Posté le 08-11-2007 à 14:49:47
De toutes façons le schema c'est :
Plus on crypte tot mieux c'est. Apres s'il veut de la securité, qui fasse pas rigolo, qu'il explique sont architecture et le type d'application.
Car evidement une appli Web multitiers se securise pas pareil qu'une appli lourde.
Marsh Posté le 08-11-2007 à 17:31:04
donc dans mysql, t'as simplement la fonction md5() si je ne m'abuse
ceci dit, je suis d'accord avec mei, il faut mieux crypter avant. ceci dit, crypter dans un trigger, c'est s'assurer aussi que tout est bien crypté, y compris les données inserrées à la main ou qui proviennent d'autres outils
Marsh Posté le 08-11-2007 à 17:50:34
Apres ca depends l'architecture, il est tres facile en web d'etre securisé (HTTPS), et en application lourde le probleme se pose moins.
PS : Rapellons nous que tout les jours lorsque l'on utilise le bon vieux protocole POP notre mot de passe passe en clair sur le reseau.
Marsh Posté le 08-11-2007 à 17:53:30
c pour que ça j'utilise rpc over https pour me connecter à exchange
Marsh Posté le 08-11-2007 à 17:58:12
Ce qui est dramatique c'est qu'aucun FAI ne propose ni le POPS (okay c'est de la merde), ni l'IMAPS.
Marsh Posté le 05-11-2007 à 14:25:10
Bonjour a tous,
Je dois pour un petit programme comparer des mots de passe pour un accès. Sous java j'ai crypter les mdp donné par l'utilisateur en MD5, et il me faut donc maintenant convertir mes mots de passes dans ma base de donnée SQL en MD5.
J'ai fais quelques recherches j'ai essayé avec un trigger :
CREATE OR REPLACE TRIGGER MajMd5
before
INSERT on identifiant
for each row
BEGIN
UPDATE identifiant set password = md5(password);
END;
/
SHOW ERRORS;
mais ça ne fonctionne pas, les syntaxes que j'ai trouvé sur le net tel que :
select md5('abc');
qui est censé renvoyé la chaine abc crypter en md5 ne fonctionne pas. Donc si quelqu'un aurai la solution ça serai formidable .
Merci d'avance Eva.
Message édité par Evanok le 05-11-2007 à 14:26:56