Hoy vamos a ver cómo restablecer la contraseña de OpenCart (sistema de comercio electrónico en PHP) manualmente, directamente en la base de datos; generando el hash y la sal manualmente con una función creada por mí.
Aquí dejo el código, y la explicación la dejamos al final.
<?php
function token($length = 32) {
// Create random token
$string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$max = strlen($string) - 1;
$token = '';
for ($i = 0; $i < $length; $i++) {
$token .= $string[mt_rand(0, $max)];
}
return $token;
}
function generar_pass($passTextoPlano){
$sal = token(9);
$hash = sha1($sal . sha1($sal . sha1($passTextoPlano)));
return [
"sal" => $sal,
"hash" => $hash,
];
}
// Demostrar uso
$datosPass = generar_pass("hunter2");
$pass = $datosPass["hash"]; // Este va en el campo password
$sal = $datosPass["sal"]; // Este va en el campo salt
printf("La sal es %s y la pass es %s", $sal, $pass);
La función regresa un arreglo que tiene la sal y la contraseña, la forma de llamarla es pasarle la contraseña en texto plano.
Una vez que tengas la sal y la contraseña simplemente haz un update de tu tabla de la base de datos. En mi caso:
update oc_user set salt = "vpBBLdiEH", password = "993100efe6af8b0f1b5cb6371430f9a43cb83b27" where username = "parzibyte";
Mi tabla se llama oc_user porque al instalar OpenCart utilicé ese prefijo, en tu caso puede variar.
Gracias a que OpenCart es open source podemos mirar cómo es que genera la sal y guarda los hashes.
En su código fuente implementa la obtención de una cadena aleatoria segura criptográficamente y luego usa sha1
para hashearla, concatenándola con la contraseña del usuario.
La generación de la sal es la siguiente:
Usa la función llamada token definida en helpers/general.php y la llama, obteniendo una cadena aleatoria de 9 dígitos.
Después la concatena y la hashea con SHA1:
Finalmente, en la base de datos guarda todo en la tabla user en los campos salt y password:
Sabiendo todo eso pudimos escribir una función que genera la sal y la contraseña para poder resetear la contraseña de un usuario manualmente en OpenCart.
Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Esta web usa cookies.