Autor
|
Tema: php vs mysql, ¿cual es la mejor forma de cifrar contraseñas? (Leído 13,137 veces)
|
twoz
Desconectado
Mensajes: 100
|
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 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
Mensajes: 2.804
|
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
|
cifra con md5 o crea un aforma vos mismo, saludos
|
|
|
En línea
|
|
|
|
twoz
Desconectado
Mensajes: 100
|
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
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
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
Mensajes: 100
|
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... 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 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 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
Mensajes: 5.110
|
cifrado en php para todos los gustoshttp://foro.codigosweb.net/php/encriptacion_en_php_para_todos_los_gustos-t424.0.html<?php function rhex($num) { $hex_chr = "0123456789abcdef"; $str = ""; for($j = 0; $j <= 3; $j++) $str .= substr($hex_chr, ($num >> ($j * 8 + 4)) & 0x0F, 1) . substr($hex_chr, ($num >> ($j * 8)) & 0x0F, 1); return $str; } function str2blks_MD5($str) { $nblk = ((strlen($str) + 8) >> 6) + 1; for($i = 0; $i < $nblk * 16; $i++) $blks[$i] = 0; for($i = 0; $i < strlen($str); $i++) $blks[$i >> 2] |= ord(substr($str, $i, 1)) << (($i % 4) * 8); $blks[$i >> 2] |= 0x80 << (($i % 4) * 8); $blks[$nblk * 16 - 2] = strlen($str) * 8; return $blks; } function add($x, $y) { $lsw = ($x & 0xFFFF) + ($y & 0xFFFF); $msw = ($x >> 16) + ($y >> 16) + ($lsw >> 16); return ($msw << 16) | ($lsw & 0xFFFF); } function rol($num, $cnt) { return ($num << $cnt) | zeroFill($num, 32 - $cnt); } function zeroFill($a, $b) { if (strlen($bin) < $b) $bin = 0; for ($i=0; $i < $b; $i++) { $bin = "0".$bin; } } function cmn($q, $a, $b, $x, $s, $t) { return add(rol(add(add($a, $q), add($x, $t)), $s), $b); } function ff($a, $b, $c, $d, $x, $s, $t) { return cmn(($b & $c) | ((~$b) & $d), $a, $b, $x, $s, $t); } function gg($a, $b, $c, $d, $x, $s, $t) { return cmn(($b & $d) | ($c & (~$d)), $a, $b, $x, $s, $t); } function hh($a, $b, $c, $d, $x, $s, $t) { return cmn($b ^ $c ^ $d, $a, $b, $x, $s, $t); } function ii($a, $b, $c, $d, $x, $s, $t) { return cmn($c ^ ($b | (~$d)), $a, $b, $x, $s, $t); } function md5p($str) { $x = str2blks_MD5($str); $a = 1732584193; $b = -271733879; $c = -1732584194; $d = 271733878; for($i = 0; $i < sizeof($x); $i += 16) { $olda = $a; $oldb = $b; $oldc = $c; $oldd = $d; $a = ff($a, $b, $c, $d, $x[$i+ 0], 7 , -680876936); $d = ff($d, $a, $b, $c, $x[$i+ 1], 12, -389564586); $c = ff($c, $d, $a, $b, $x[$i+ 2], 17, 606105819); $b = ff($b, $c, $d, $a, $x[$i+ 3], 22, -1044525330); $a = ff($a, $b, $c, $d, $x[$i+ 4], 7 , -176418897); $d = ff($d, $a, $b, $c, $x[$i+ 5], 12, 1200080426); $c = ff($c, $d, $a, $b, $x[$i+ 6], 17, -1473231341); $b = ff($b, $c, $d, $a, $x[$i+ 7], 22, -45705983); $a = ff($a, $b, $c, $d, $x[$i+ 8], 7 , 1770035416); $d = ff($d, $a, $b, $c, $x[$i+ 9], 12, -1958414417); $c = ff($c, $d, $a, $b, $x[$i+10], 17, -42063); $b = ff($b, $c, $d, $a, $x[$i+11], 22, -1990404162); $a = ff($a, $b, $c, $d, $x[$i+12], 7 , 1804603682); $d = ff($d, $a, $b, $c, $x[$i+13], 12, -40341101); $c = ff($c, $d, $a, $b, $x[$i+14], 17, -1502002290); $b = ff($b, $c, $d, $a, $x[$i+15], 22, 1236535329); $a = gg($a, $b, $c, $d, $x[$i+ 1], 5 , -165796510); $d = gg($d, $a, $b, $c, $x[$i+ 6], 9 , -1069501632); $c = gg($c, $d, $a, $b, $x[$i+11], 14, 643717713); $b = gg($b, $c, $d, $a, $x[$i+ 0], 20, -373897302); $a = gg($a, $b, $c, $d, $x[$i+ 5], 5 , -701558691); $d = gg($d, $a, $b, $c, $x[$i+10], 9 , 38016083); $c = gg($c, $d, $a, $b, $x[$i+15], 14, -660478335); $b = gg($b, $c, $d, $a, $x[$i+ 4], 20, -405537848); $a = gg($a, $b, $c, $d, $x[$i+ 9], 5 , 568446438); $d = gg($d, $a, $b, $c, $x[$i+14], 9 , -1019803690); $c = gg($c, $d, $a, $b, $x[$i+ 3], 14, -187363961); $b = gg($b, $c, $d, $a, $x[$i+ 8], 20, 1163531501); $a = gg($a, $b, $c, $d, $x[$i+13], 5 , -1444681467); $d = gg($d, $a, $b, $c, $x[$i+ 2], 9 , -51403784); $c = gg($c, $d, $a, $b, $x[$i+ 7], 14, 1735328473); $b = gg($b, $c, $d, $a, $x[$i+12], 20, -1926607734); $a = hh($a, $b, $c, $d, $x[$i+ 5], 4 , -378558); $d = hh($d, $a, $b, $c, $x[$i+ 8], 11, -2022574463); $c = hh($c, $d, $a, $b, $x[$i+11], 16, 1839030562); $b = hh($b, $c, $d, $a, $x[$i+14], 23, -35309556); $a = hh($a, $b, $c, $d, $x[$i+ 1], 4 , -1530992060); $d = hh($d, $a, $b, $c, $x[$i+ 4], 11, 1272893353); $c = hh($c, $d, $a, $b, $x[$i+ 7], 16, -155497632); $b = hh($b, $c, $d, $a, $x[$i+10], 23, -1094730640); $a = hh($a, $b, $c, $d, $x[$i+13], 4 , 681279174); $d = hh($d, $a, $b, $c, $x[$i+ 0], 11, -358537222); $c = hh($c, $d, $a, $b, $x[$i+ 3], 16, -722521979); $b = hh($b, $c, $d, $a, $x[$i+ 6], 23, 76029189); $a = hh($a, $b, $c, $d, $x[$i+ 9], 4 , -640364487); $d = hh($d, $a, $b, $c, $x[$i+12], 11, -421815835); $c = hh($c, $d, $a, $b, $x[$i+15], 16, 530742520); $b = hh($b, $c, $d, $a, $x[$i+ 2], 23, -995338651); $a = ii($a, $b, $c, $d, $x[$i+ 0], 6 , -198630844); $d = ii($d, $a, $b, $c, $x[$i+ 7], 10, 1126891415); $c = ii($c, $d, $a, $b, $x[$i+14], 15, -1416354905); $b = ii($b, $c, $d, $a, $x[$i+ 5], 21, -57434055); $a = ii($a, $b, $c, $d, $x[$i+12], 6 , 1700485571); $d = ii($d, $a, $b, $c, $x[$i+ 3], 10, -1894986606); $c = ii($c, $d, $a, $b, $x[$i+10], 15, -1051523); $b = ii($b, $c, $d, $a, $x[$i+ 1], 21, -2054922799); $a = ii($a, $b, $c, $d, $x[$i+ 8], 6 , 1873313359); $d = ii($d, $a, $b, $c, $x[$i+15], 10, -30611744); $c = ii($c, $d, $a, $b, $x[$i+ 6], 15, -1560198380); $b = ii($b, $c, $d, $a, $x[$i+13], 21, 1309151649); $a = ii($a, $b, $c, $d, $x[$i+ 4], 6 , -145523070); $d = ii($d, $a, $b, $c, $x[$i+11], 10, -1120210379); $c = ii($c, $d, $a, $b, $x[$i+ 2], 15, 718787259); $b = ii($b, $c, $d, $a, $x[$i+ 9], 21, -343485551); $a = add($a, $olda); $b = add($b, $oldb); $c = add($c, $oldc); $d = add($d, $oldd); } return rhex($a) . rhex($b) . rhex($c) . rhex($d); } echo md5p('word');//Generado manualmente echo "\r\n<br />".md5('word');//Generado con PHP ?>
|
|
|
En línea
|
|
|
|
SKuLLKiD_
|
"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
Mensajes: 341
|
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_
|
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.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
En este caso cual sería la mejor forma de saber qué uso se hace de un ordenador?
Hacking
|
oisac
|
3
|
4,375
|
18 Enero 2011, 20:17 pm
por Garfield07
|
|
|
Cual es la mejor forma de cuidar la vida util de la bateria (Solucionado)
Hardware
|
Roy-Mustang
|
3
|
5,503
|
31 Marzo 2011, 03:24 am
por Roy-Mustang
|
|
|
Cual es la mejor forma de hacer update entre dos tablas en dos servidores distin
Bases de Datos
|
Graphixx
|
4
|
3,742
|
21 Diciembre 2011, 22:06 pm
por seba123neo
|
|
|
Cual es la mejor forma para inutilizar archivos?
Análisis y Diseño de Malware
|
Sp3ctr3
|
9
|
5,896
|
8 Junio 2012, 20:13 pm
por 79137913
|
|
|
Cuál es la mejor forma para mostrar datos a traves de VGA?
Electrónica
|
Agente Naranja
|
1
|
3,878
|
14 Marzo 2013, 16:37 pm
por Firos
|
|