CREAR /ENCRIPTAR Y VERIFICAR CONTRASEÑAS
Publicado por Saturnino (14 intervenciones) el 20/09/2019 19:29:02
Buenas tardes a todos. Otra vez está el novato preguntando, pero entiendo que con vuestra ayuda aprenderé. Gracias de antemano por aguantarme y dedicar parte de vuestro valioso tiempo en resolver esta cuestión. Pero creo que puede ser interesante para todos.
Me encuentro ante la necesidad, me imagino que habitual en el diseño de web's, de que un usuario se haga cliente, y entre otros datos introduzca una clave, que será necesaria para volver a entrar después.
La clave la introduce a través de:
La envío a un php donde la recibo así:
posteriormente la "hasseo" con este comando:
y la guardo en mi Base de datos de esta forma:
y me queda guardada perfectamente.
Para comprobar la contraseña introducida por un supuesto cliente utilizo un formulario para este fin, así:
con el método Post igual que en el otro formulario.
la recibo en la página php de la siguiente forma:
Y aquí empieza la duda, por lo menos para mi, la duda era.....
¿debo encriptar la clave introducida antes de compararla o no hace falta encriptar la clave introducida antes de compararla con la existente en la tabla de la base de datos?
Leo y extraigo los valores de la tabla claves mediante el siguiente código:
Mientras que hacía esta consulta, creo que lo he resuelto, lo dejo por si lo veis interesante para alguien.
Creo que así está resuelto. Por si a alguien le sirve. Eso sí fundamental es que el tipo en el campo de la Tabla, en mi caso en el campo "CLAVES", debe ser CHAR con una longitud de 60 caracteres. No se si con VARCHAR funciona.
Un saludo a todos.
Me encuentro ante la necesidad, me imagino que habitual en el diseño de web's, de que un usuario se haga cliente, y entre otros datos introduzca una clave, que será necesaria para volver a entrar después.
La clave la introduce a través de:
1
<input id="pass"type="password" name="Clave" pattern="[A-Za-z0-9]{8,12}" title="explico como debe ser la clave." maxlength="12" />
1
$clave=$_POST["Clave"];
1
$passHash=password_hash($clave,PASSWORD_DEFAULT);
1
2
3
4
5
6
7
8
9
$sqli="INSERT INTO claves (NUMCLI, RSOCIAL, CLAVES) VALUES ('$numcli', '$naporscli', '$passHash')";
if (mysqli_query($mysqli, $sqli))
{
$mens= "Clave Guardada satisfactoriamente.";
}
else
{
$mens="No se ha podido guardar la clave";
}
Para comprobar la contraseña introducida por un supuesto cliente utilizo un formulario para este fin, así:
1
<input id="pass" type="password" name="Clave" maxlength="12" />
la recibo en la página php de la siguiente forma:
1
$clave=$_POST["Clave"];
¿debo encriptar la clave introducida antes de compararla o no hace falta encriptar la clave introducida antes de compararla con la existente en la tabla de la base de datos?
1
$claveHash=password_hash($clave,PASSWORD_DEFAULT); // "hasseo" la clave introducida
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
$sqli="SELECT NUMCLI, RSOCIAL, CLAVES FROM claves ";
if ($result=mysqli_query($mysqli, $sqli)) //conjunto de todos los datos de la consulta
{
$row_cnt=mysqli_num_rows($result);
echo ("El numero de Registros es.....".$row_cnt);
echo("hasta aquí he llegado etapa 1......");
if ($row_cnt>0)
{
verclave(); //verificar clave
}
else
{
echo"La contraseña es incorrecta";
}
}
else
{
$mens="No existe ninguna clave";
}
function verclave()
{
global $result;
global $row_cnt;
global $clave;
global $passhash;
global $claveHash;
while(($row = mysqli_fetch_assoc($result))!=NULL)
{
$numcli = $row['NUMCLI'];
$naporsocial = $row['RSOCIAL'];
$passHash=$row['CLAVES'];
}
if (password_verify($clave, $passHash)) // en vez de $clave pongo $claveHash y tampoco me verifica
{
echo '¡La contraseña es válida!';
$respuesta="Ok";
header('Location:http://localhost/CONTROL/controlobras.php');
}
else
{
$respuesta="No_Ok";
echo ('La contraseña no es válida.');
}
}
Creo que así está resuelto. Por si a alguien le sirve. Eso sí fundamental es que el tipo en el campo de la Tabla, en mi caso en el campo "CLAVES", debe ser CHAR con una longitud de 60 caracteres. No se si con VARCHAR funciona.
Un saludo a todos.
Valora esta pregunta


0