Comprobé las contraseñas para los usuarios contra el DB.
Lo que es más rápido, la función MySQL MD5
... pwd = MD5('.$pwd.')
O la función PHP MD5
... pwd = '.md5($pwd).'
¿Cuál es el camino correcto entre las dos opciones?
Si su aplicación solo está calculando md5 cuando alguien se registra en su sitio o inicia sesión, ¿tendrá muchas llamadas por md5 por hora? ¿Par de cientos? Si es así, no creo que la pequeña diferencia entre PHP y MySQL sea significativa.
La pregunta debería ser más bien “¿dónde pongo el hecho de que la contraseña se almacena utilizando md5” que “lo que me hace ganar casi nada”.
Y, como nota al margen, otra pregunta podría ser: ¿dónde puede permitirse gastar recursos para ese tipo de cálculos? Si tiene 10 servidores PHP y un servidor de bases de datos que ya están cargados, obtendrá su respuesta 😉
Pero, solo por diversión:
mysql> select benchmark(1000000, md5('test')); +---------------------------------+ | benchmark(1000000, md5('test')) | +---------------------------------+ | 0 | +---------------------------------+ 1 row in set (2.24 sec)
Y en PHP:
$before = microtime(true); for ($i=0 ; $i<1000000 ; $i++) { $a = md5('test'); } $after = microtime(true); echo ($after-$before) . "\n";
da :
$ php ~/developpement/tests/temp/temp.php 3.3341760635376
Pero probablemente no estarás calculando un millón de md5 como este, ¿o sí?
(Y esto no tiene nada que ver con la prevención de inyecciones de SQL: ¡solo escape / cite sus datos! ¡Siempre! O use declaraciones preparadas)
No sé cuál es más rápido, pero si lo haces en PHP, evitas la posibilidad de inyección SQL.
¿El rendimiento es realmente un problema aquí? Es probable que sea marginal.
Mídelo, es la única manera de estar seguro.
Yo diría, lea el valor de la columna de mysql, luego compare el resultado con el hash calculado en su código de cliente (por ejemplo, php).
La razón principal para hacer esto es que evita cosas estúpidas como la base de datos que recostack la columna de forma no binaria (por ejemplo, insensible a mayúsculas y minúsculas, etc.), que generalmente no es deseable para un hash.