elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  php vs mysql, ¿cual es la mejor forma de cifrar contraseñas?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: php vs mysql, ¿cual es la mejor forma de cifrar contraseñas?  (Leído 13,137 veces)
twoz

Desconectado Desconectado

Mensajes: 100



Ver Perfil
php vs mysql, ¿cual es la mejor forma de cifrar contraseñas?
« en: 7 Diciembre 2009, 00:39 am »

viendo algunos temas por ahi, me ha entrado la duda sobre la forma de cifrar las contraseñas, si es mejor hacerlo con md5, si es mejor hacerlo en el php o mysql, etc.

yo en principio tenia pensado obtener la contrseña mediante un form, y luego aplicar la funcion md5 en php o en mysql indistintamente, pero haciendo pruebas, añadi una pass con desde mysql con md5, y luego desde php saque el valor que obtendria esa misma palabra con la funcion md5 de php y el caso es que coinciden pero solo en parte, la contraseña que obtengo de mysql tiene la mitad de longitud que la que obtengo directamente desde php...

Esto porque es? no se supone que deberia de obtener la misma cadena de texto haciendolo desde php que desde mysql? como puede ser desde php el doble de largo? :S

a raiz de eso, he estado buscando y e visto que hay quien recomienda utilizar la funcion de mysql pasword() en lugar de md5, como es la primera vez que hago algo con esto, pues ya no se ni donde meterme  :laugh: porque en todos los sitios dicen como hacer tal o cual, pero en ninguno dicen que es mejor xD

asique despues de todo ese tochazo, lanzo mi pregunta, ¿como cifro las contraseñas? desde php o mysql, y sea de donde sea, ¿las cifro a través de md5() o de password()?

un saludo, y gracias por las respuestas ;-)


En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: php vs mysql, ¿cual es la mejor forma de cifrar contraseñas?
« Respuesta #1 en: 7 Diciembre 2009, 00:58 am »

En ningun sitio pueden decirte cual es la mejor opcion porque eso es algo ya personal  ;)  y para evitar disputas entre usuarios unos fanaticos de una cosa y otros de la otra... pues lo ideal es dar la caracteristica de cada asunto, y que el usuario particularmente seleccione cual le conviene.

Yo si fuese tu, elegiria cifrar las contrasenas con la funcion md5 dentro de MySQL en vez del codigo php. Mi razon? sencillamente si alguien te hace algun SQL injection o alguien obtiene o tiene acceso alguna vez a tu base de datos mysql podra ver en texto plano las contrasenas de los usuarios (sino estan encriptadas) que aunque cubras esto mediante codigo php sera exclusivamente solo para acceso web, pero si alguien obtiene cosas de la base de datos? aqui como impides que vea en texto no plano datos importantes?

Es solo mi humilde opinion, cada uno tendra la suya propia como te digo  ;)


En línea

djtuxy

Desconectado Desconectado

Mensajes: 10


Ver Perfil WWW
Re: php vs mysql, ¿cual es la mejor forma de cifrar contraseñas?
« Respuesta #2 en: 7 Diciembre 2009, 03:11 am »

cifra con md5 o crea un aforma vos mismo, saludos ;)
En línea

twoz

Desconectado Desconectado

Mensajes: 100



Ver Perfil
Re: php vs mysql, ¿cual es la mejor forma de cifrar contraseñas?
« Respuesta #3 en: 7 Diciembre 2009, 11:38 am »

gracias por las respuestas, el caso tifa, es que mi idea seria guardar las contraseñas encriptadas en la base de datos, el problema estaba en cuando encriptarlas, porque dejo un ejemplo:

como estaba trasteando con la cuenta de admin, pues he probado a cifrar esa cuenta, y eso es lo que me aparece:
"admin" cifrado en mysql: 21232f297a57a5a
"admin" cifrado en php:    21232f297a57a5a743894a0e4a801fc3

se puede ver que son identicas  pero la codificada con php es mas larga, lo que no se si significa que sea más fuerte o que resista mejor un intento de desencriptarla si entrasen en mi base de datos.

un saludo
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: php vs mysql, ¿cual es la mejor forma de cifrar contraseñas?
« Respuesta #4 en: 7 Diciembre 2009, 11:52 am »

No se cual sea el problema, pero la que te devuelve mysql esta mal, deberían de ser 32 caracteres como la que te devuelve php :-\

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
twoz

Desconectado Desconectado

Mensajes: 100



Ver Perfil
Re: php vs mysql, ¿cual es la mejor forma de cifrar contraseñas?
« Respuesta #5 en: 7 Diciembre 2009, 12:25 pm »

la inserte a través de phpmyadmin, puede que ahí este el problema, voy a insertar un nuevo usuario desde la consola directamente, a ver que aparece.

ahora pongo los resultados

edit:

vale, he insertado un nuevo usuario de la siguiente manera, insert into usuarios (usuario,pass) values ("usuario1", md5("admin"));

y me sigue dando la misma longitud de caracteres, no se porque sera esto, pero con lo que me dices novlucker lo que voy a hacer es codificar desde php y enviar la contraseña ya codificada a mysql.

emmm...  :silbar: vuelvo a editar, y esque acabo de leer que obviamente es necesario un campo de 32 caracteres... y yo al crear la tabla la cree pensando en el numero de caracteres de la contraseña, no del hash resultante, por lo que talves esa falta de caracteres se deba a que no hay espacio, voy a crear todo de nuevo y cuento.

again! edito  :xD he aumentado el valor del campo a 32 y ya obtengo la misma codificación md5 desde php que desde mysql.
ahora ya solo me queda decidir si codificar desde php o mysql, y ponerme a mirar sobre ssl, para que la trasnmision hasta el servidor sea fiable :D
gracias por las respuestas.
« Última modificación: 7 Diciembre 2009, 13:56 pm por thzneas » En línea

дٳŦ٭
GNU/Linux Infrastructure Specialist
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.110


Ver Perfil WWW
Re: php vs mysql, ¿cual es la mejor forma de cifrar contraseñas?
« Respuesta #6 en: 7 Diciembre 2009, 19:03 pm »

cifrado en php para todos los gustos
http://foro.codigosweb.net/php/encriptacion_en_php_para_todos_los_gustos-t424.0.html

Código
  1. <?php
  2. function rhex($num) {
  3.    $hex_chr = "0123456789abcdef";
  4.    $str = "";
  5.    for($j = 0; $j <= 3; $j++)
  6.        $str .= substr($hex_chr, ($num >> ($j * 8 + 4)) & 0x0F, 1) . substr($hex_chr, ($num >> ($j * 8)) & 0x0F, 1);
  7.    return $str;
  8. }
  9. function str2blks_MD5($str) {
  10.    $nblk = ((strlen($str) + 8) >> 6) + 1;
  11.    for($i = 0; $i < $nblk * 16; $i++) $blks[$i] = 0;
  12.    for($i = 0; $i < strlen($str); $i++)
  13.        $blks[$i >> 2] |= ord(substr($str, $i, 1)) << (($i % 4) * 8);
  14.    $blks[$i >> 2] |= 0x80 << (($i % 4) * 8);
  15.    $blks[$nblk * 16 - 2] = strlen($str) * 8;
  16.    return $blks;
  17. }
  18. function add($x, $y) {
  19.    $lsw = ($x & 0xFFFF) + ($y & 0xFFFF);
  20.    $msw = ($x >> 16) + ($y >> 16) + ($lsw >> 16);
  21.    return ($msw << 16) | ($lsw & 0xFFFF);
  22. }
  23. function rol($num, $cnt) {
  24.    return ($num << $cnt) | zeroFill($num, 32 - $cnt);
  25. }
  26. function zeroFill($a, $b) {
  27.    $bin = decbin($a);
  28.    if (strlen($bin) < $b) $bin = 0;
  29.    else $bin = substr($bin, 0, strlen($bin) - $b);
  30.    for ($i=0; $i < $b; $i++) {
  31.        $bin = "0".$bin;
  32.    }
  33.    return bindec($bin);
  34. }
  35. function cmn($q, $a, $b, $x, $s, $t) {
  36.    return add(rol(add(add($a, $q), add($x, $t)), $s), $b);
  37. }
  38. function ff($a, $b, $c, $d, $x, $s, $t) {
  39.    return cmn(($b & $c) | ((~$b) & $d), $a, $b, $x, $s, $t);
  40. }
  41. function gg($a, $b, $c, $d, $x, $s, $t) {
  42.    return cmn(($b & $d) | ($c & (~$d)), $a, $b, $x, $s, $t);
  43. }
  44. function hh($a, $b, $c, $d, $x, $s, $t) {
  45.    return cmn($b ^ $c ^ $d, $a, $b, $x, $s, $t);
  46. }
  47. function ii($a, $b, $c, $d, $x, $s, $t) {
  48.    return cmn($c ^ ($b | (~$d)), $a, $b, $x, $s, $t);
  49. }
  50. function md5p($str) {
  51.  $x = str2blks_MD5($str);
  52.  $a =  1732584193;
  53.  $b = -271733879;
  54.  $c = -1732584194;
  55.  $d =  271733878;
  56.  
  57.  for($i = 0; $i < sizeof($x); $i += 16) {
  58.    $olda = $a;
  59.    $oldb = $b;
  60.    $oldc = $c;
  61.    $oldd = $d;
  62.  
  63.    $a = ff($a, $b, $c, $d, $x[$i+ 0], 7 , -680876936);
  64.    $d = ff($d, $a, $b, $c, $x[$i+ 1], 12, -389564586);
  65.    $c = ff($c, $d, $a, $b, $x[$i+ 2], 17,  606105819);
  66.    $b = ff($b, $c, $d, $a, $x[$i+ 3], 22, -1044525330);
  67.    $a = ff($a, $b, $c, $d, $x[$i+ 4], 7 , -176418897);
  68.    $d = ff($d, $a, $b, $c, $x[$i+ 5], 12,  1200080426);
  69.    $c = ff($c, $d, $a, $b, $x[$i+ 6], 17, -1473231341);
  70.    $b = ff($b, $c, $d, $a, $x[$i+ 7], 22, -45705983);
  71.    $a = ff($a, $b, $c, $d, $x[$i+ 8], 7 ,  1770035416);
  72.    $d = ff($d, $a, $b, $c, $x[$i+ 9], 12, -1958414417);
  73.    $c = ff($c, $d, $a, $b, $x[$i+10], 17, -42063);
  74.    $b = ff($b, $c, $d, $a, $x[$i+11], 22, -1990404162);
  75.    $a = ff($a, $b, $c, $d, $x[$i+12], 7 ,  1804603682);
  76.    $d = ff($d, $a, $b, $c, $x[$i+13], 12, -40341101);
  77.    $c = ff($c, $d, $a, $b, $x[$i+14], 17, -1502002290);
  78.    $b = ff($b, $c, $d, $a, $x[$i+15], 22,  1236535329);
  79.  
  80.    $a = gg($a, $b, $c, $d, $x[$i+ 1], 5 , -165796510);
  81.    $d = gg($d, $a, $b, $c, $x[$i+ 6], 9 , -1069501632);
  82.    $c = gg($c, $d, $a, $b, $x[$i+11], 14,  643717713);
  83.    $b = gg($b, $c, $d, $a, $x[$i+ 0], 20, -373897302);
  84.    $a = gg($a, $b, $c, $d, $x[$i+ 5], 5 , -701558691);
  85.    $d = gg($d, $a, $b, $c, $x[$i+10], 9 ,  38016083);
  86.    $c = gg($c, $d, $a, $b, $x[$i+15], 14, -660478335);
  87.    $b = gg($b, $c, $d, $a, $x[$i+ 4], 20, -405537848);
  88.    $a = gg($a, $b, $c, $d, $x[$i+ 9], 5 ,  568446438);
  89.    $d = gg($d, $a, $b, $c, $x[$i+14], 9 , -1019803690);
  90.    $c = gg($c, $d, $a, $b, $x[$i+ 3], 14, -187363961);
  91.    $b = gg($b, $c, $d, $a, $x[$i+ 8], 20,  1163531501);
  92.    $a = gg($a, $b, $c, $d, $x[$i+13], 5 , -1444681467);
  93.    $d = gg($d, $a, $b, $c, $x[$i+ 2], 9 , -51403784);
  94.    $c = gg($c, $d, $a, $b, $x[$i+ 7], 14,  1735328473);
  95.    $b = gg($b, $c, $d, $a, $x[$i+12], 20, -1926607734);
  96.  
  97.    $a = hh($a, $b, $c, $d, $x[$i+ 5], 4 , -378558);
  98.    $d = hh($d, $a, $b, $c, $x[$i+ 8], 11, -2022574463);
  99.    $c = hh($c, $d, $a, $b, $x[$i+11], 16,  1839030562);
  100.    $b = hh($b, $c, $d, $a, $x[$i+14], 23, -35309556);
  101.    $a = hh($a, $b, $c, $d, $x[$i+ 1], 4 , -1530992060);
  102.    $d = hh($d, $a, $b, $c, $x[$i+ 4], 11,  1272893353);
  103.    $c = hh($c, $d, $a, $b, $x[$i+ 7], 16, -155497632);
  104.    $b = hh($b, $c, $d, $a, $x[$i+10], 23, -1094730640);
  105.    $a = hh($a, $b, $c, $d, $x[$i+13], 4 ,  681279174);
  106.    $d = hh($d, $a, $b, $c, $x[$i+ 0], 11, -358537222);
  107.    $c = hh($c, $d, $a, $b, $x[$i+ 3], 16, -722521979);
  108.    $b = hh($b, $c, $d, $a, $x[$i+ 6], 23,  76029189);
  109.    $a = hh($a, $b, $c, $d, $x[$i+ 9], 4 , -640364487);
  110.    $d = hh($d, $a, $b, $c, $x[$i+12], 11, -421815835);
  111.    $c = hh($c, $d, $a, $b, $x[$i+15], 16,  530742520);
  112.    $b = hh($b, $c, $d, $a, $x[$i+ 2], 23, -995338651);
  113.  
  114.    $a = ii($a, $b, $c, $d, $x[$i+ 0], 6 , -198630844);
  115.    $d = ii($d, $a, $b, $c, $x[$i+ 7], 10,  1126891415);
  116.    $c = ii($c, $d, $a, $b, $x[$i+14], 15, -1416354905);
  117.    $b = ii($b, $c, $d, $a, $x[$i+ 5], 21, -57434055);
  118.    $a = ii($a, $b, $c, $d, $x[$i+12], 6 ,  1700485571);
  119.    $d = ii($d, $a, $b, $c, $x[$i+ 3], 10, -1894986606);
  120.    $c = ii($c, $d, $a, $b, $x[$i+10], 15, -1051523);
  121.    $b = ii($b, $c, $d, $a, $x[$i+ 1], 21, -2054922799);
  122.    $a = ii($a, $b, $c, $d, $x[$i+ 8], 6 ,  1873313359);
  123.    $d = ii($d, $a, $b, $c, $x[$i+15], 10, -30611744);
  124.    $c = ii($c, $d, $a, $b, $x[$i+ 6], 15, -1560198380);
  125.    $b = ii($b, $c, $d, $a, $x[$i+13], 21,  1309151649);
  126.    $a = ii($a, $b, $c, $d, $x[$i+ 4], 6 , -145523070);
  127.    $d = ii($d, $a, $b, $c, $x[$i+11], 10, -1120210379);
  128.    $c = ii($c, $d, $a, $b, $x[$i+ 2], 15,  718787259);
  129.    $b = ii($b, $c, $d, $a, $x[$i+ 9], 21, -343485551);
  130.  
  131.        $a = add($a, $olda);
  132.        $b = add($b, $oldb);
  133.        $c = add($c, $oldc);
  134.        $d = add($d, $oldd);
  135.    }
  136.    return rhex($a) . rhex($b) . rhex($c) . rhex($d);
  137. }
  138. echo md5p('word');//Generado manualmente
  139. echo "\r\n<br />".md5('word');//Generado con PHP
  140. ?>
  141.  
En línea

SKuLLKiD_

Desconectado Desconectado

Mensajes: 146



Ver Perfil WWW
Re: php vs mysql, ¿cual es la mejor forma de cifrar contraseñas?
« Respuesta #7 en: 17 Diciembre 2009, 21:10 pm »

"admin" cifrado en mysql: 21232f297a57a5a
"admin" cifrado en php:    21232f297a57a5a743894a0e4a801fc3

¿Qué longitud tiene el campo varchar de la contraseña en MySQL?
En línea

Me duele el fémur, pero no me importa. Tengo un camión.
alcatel


Desconectado Desconectado

Mensajes: 341



Ver Perfil
Re: php vs mysql, ¿cual es la mejor forma de cifrar contraseñas?
« Respuesta #8 en: 17 Diciembre 2009, 22:06 pm »

Yo pensaba que el algoritmo de cifrado de md5 es el mismo para mysql que para php... pensaba que me daba igual quien lo hacía. Personalmente prefiero que lo haga php. Si la base de datos tiene mucha carga pues prefiero no ejecutar funciones en las SQL.

Lo del tamaño de almacenamiento... pues md5 tiene una longitud de 128  caracteres y un varchar hasta 255... Igual me equivoco. No se casi nada de bases de datos.
En línea

Sin rebote no hay jugada.
SKuLLKiD_

Desconectado Desconectado

Mensajes: 146



Ver Perfil WWW
Re: php vs mysql, ¿cual es la mejor forma de cifrar contraseñas?
« Respuesta #9 en: 18 Diciembre 2009, 21:01 pm »

No, si las contraseñas se guardan encriptadas en un varchar, pero si la longitud es más pequeña de la cuenta pues te la corta. Tiene toda la pinta de que es ese el problema.
En línea

Me duele el fémur, pero no me importa. Tengo un camión.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines