Otras personas han mostrado cómo se puede hacer, por lo que sobre los principios en general ...
Como ya se vinculado por NullUserException en los comentarios, no debe hacerlo simplemente agregando una sal estática a md5, si la seguridad es importante. Note however that you can store your salt as-is. Tanto la sal estática como md5 no se consideran enfoques muy seguros. Están bien si no importa mucho, pero si lo hace, deberías ir por el otro lado.
About static salt:
Un error común es el uso de la misma sal en cada hash. O la sal está codificada en el programa, o se genera aleatoriamente una vez. Esto es ineficaz porque si dos usuarios tienen la misma contraseña, todavía tendrán tienen el mismo hash. Un atacante aún puede usar un ataque de tabla de búsqueda inversa para ejecutar un ataque de diccionario en cada hash al mismo tiempo. Ellos solo tienen que aplicar la sal a cada contraseña adivinar antes de que ellos lo hagan . Si la sal está codificada de forma rígida en un producto popular, las tablas de búsqueda y las tablas de arcoiris se pueden construir para esa sal, para facilitar hashes de grieta generados por el producto.
Se debe generar un nuevo sal aleatorio cada vez que un usuario cree una cuenta o cambie su contraseña.
Si la sal es estática, un atacante solo puede generar una tabla de arcoíris para todas las posibilidades. Con una sal que es exclusiva de un usuario, no tiene sentido hacer eso.
md5 está diseñado para la velocidad computacional, por lo que es fundamentally not the way to go. Además, ya hay un montón de pre-created rainbow tables para él, y un montón de online cracking tools.
La página vinculada contiene PHP source code, también, como un ejemplo de cómo hacerlo correctamente.
<?php
/*
* Password hashing with PBKDF2.
* Author: havoc AT defuse.ca
* www: https://defuse.ca/php-pbkdf2.htm
*/
// These constants may be changed without breaking existing hashes.
define("PBKDF2_HASH_ALGORITHM", "sha256");
define("PBKDF2_ITERATIONS", 1000);
define("PBKDF2_SALT_BYTES", 24);
define("PBKDF2_HASH_BYTES", 24);
define("HASH_SECTIONS", 4);
define("HASH_ALGORITHM_INDEX", 0);
define("HASH_ITERATION_INDEX", 1);
define("HASH_SALT_INDEX", 2);
define("HASH_PBKDF2_INDEX", 3);
function create_hash($password)
{
// format: algorithm:iterations:salt:hash
$salt = base6
Lea: [Lo que debe saber sobre la seguridad de las contraseñas] (http://crackstation.net/hashing-security.htm) – NullUserException
Gracias, lo estoy revisando – deerox
Me gustaría recomendar no usar md5, sino más bien un algoritmo de hash moderno. – Aleph