Bonjour,
Voilà j'ai une BDD en oracle 8i contenant des noms et des mots de passes, je voudrais cripter le mot de passe avec MD5, et le problème c'est que quand je fait du methode post ex:$pass = md5($_POST['pass']), le resultat n'est pas le même que dans oracle.
CREATE OR REPLACE FUNCTION RBSFACTURE.md5hash (v_input_string IN VARCHAR2)
RETURN VARCHAR2
IS
v_checksum VARCHAR2 (20);
BEGIN
v_checksum :DBMS_OBFUSCATION_TOOLKIT.md5 (input_string > v_input_string);
RETURN v_checksum;
END;
Ah merde ouais, c'est sha1 sur 40. Au temps pour moi.
Mais pas 20 quoi qu'il en soit. Et un VARCHAR c'est inutile (même si Oracle stocke ça sur un octet de moins que MySQL), un CHAR est plus adapté (puisqu'une signature md5 ou sha1 fait TOUJOURS la même longueur)
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
Tu peux nous donner un exemple du résultat ?
Prends une chaine commune,passe-la d'après les 2 méthodes et donne nous le résultat des deux.
Je trouve ça bizarre.
Pour Neige, je suis d'accord, le SHA-1 est plus sur mais pour un usage primaire où la sécurité est secondaire face à l'unicité et la population des données hashées, on reprend les mauvaises habitudes ...md5 !! LOL !!
S.
oui bien sûr
voici ce qui est généré par md5 php :
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
et voici ce qui vien de l'oracle:
Áu¹Àñ¶¨1Ã?âiw&a
juste une petite remarque c'est que j'ai déjà mes données sur oracle que je voudrai crypter afin que php le reconnaisse. le liaison php oracle ça marche nickel mais le problème c'est au niveau du cryptage d'un champ.
Y'a peut etre un souci d'encodage sur Oracle.Tu pourrais voir les paramètrages de ton Oci, ou alors travailler en UTF8 pour convertir ce qui vient d'Oracle.
Pour info: Á = c3 81 Le 8 n'est peut-être pas anodin..
A cogiter tout ça.
S.
tente d'ajouter un v_checksum := RAWTOHEX (UTL_RAW.cast_to_raw (v_checksum))
si mes souvenirs sont bons DBMS_OBFUSCATION_TOOLKIT.md5 retourne en RAW (d'ou peut être la différence d'affichage)
Essaie de voir autour des paramètres NLS.. genre NLS_LANG ou autre
Fais un SELECT * FROM NLS_SESSION_PARAMETERS
au cas ou.. ça peut te donner une piste.
S.