New question

Question:

Date: 21-11-2015 14:20:43 (In Spanish)

Alguna forma de mejorar mi encriptación de contraseñas? (Sugerencias)[Resolved]

Despues de tanto tratar de entender, le entendi a alguien de como guardar en la base de datos, la contraseña de forma mas segura que sha-1, este usa CRYPT_BLOWFISH:


// esta es la funcion que encrypta los password
function cryptPass($input, $rounds = 9) {
	$salt = null;
	$saltChars = array_merge(range('A','Z'), range('a','z'), range('0','9'));
	for($i = 0; $i < 22; $i++) {
      $salt .= $saltChars[array_rand($saltChars)]; 
	}
	return crypt($input, sprintf('$2y$%02d$', $rounds) . $salt);
}


y la forma de comprobarlo seria asi:

$err = null;
if(isset($_POST["password"])) {
$inputPass = $_POST["password"]; // value recibido del campo del formulario
// $pass = "hola";
$hashedPass = '$2y$06$vY6K7UHey4l1Wuyze4AX8epOS4etZ.1h4f85KIIW6637rZ3Ggbqiy'; // es hola, y debe logicamente traerse desde la base de datos aqui no lo hice, solo puse lo que deberia ir el campo password en la base datos.
if(crypt($inputPass, $hashedPass) == $hashedPass) {
$err = "<br /> password match";
} else {
$err = "<br /> password not match";
}
}


Disculpen si no puse <? ?> en los ejemplos
y la pregunta es hay alguna forma de mejorarla? // ya lo supe UwUr

porfa ponga ejemplos que si leyeron bien entendieron que dije que apenas entendi esta vez como encryptar la contraseña.

segun php aun existen formas mas seguras: ya les entendi (2 horas despues de hacer la pregunta)

CRYPT_SHA256

CRYPT_SHA512 :

<?php
//session_start();
// reuqire_once("");
// function que trasforma 
function cryptPass($input, $rounds = 22) {
	$salt = null;
	$saltChars = array_merge(range('A','Z'), range('a','z'), range('0','9'));
	for($i = 0; $i < $rounds; $i++) {
      $salt .= $saltChars[array_rand($saltChars)];
	}
	return crypt($input, '$6$' . $salt);
}
$err = null;
if(isset($_POST["password"])) {
$inputPass = $_POST["password"]; // value recibido del campo del formulario
$pass = "holas";
$hashedPass = cryptPass($pass);
echo $hashedPass;
if(crypt($inputPass, $hashedPass) == $hashedPass) {
$err = "<br /> password match";
} else {
$err = "<br /> password not match";
}
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="ISO-8859-1">
	<title>Document</title>
</head>
<body>
	<form action="<?=$_SERVER["PHP_SELF"];?>" method="post">
     <input type="text" name="password" />
     <input type="submit" value="Send" />
	</form>
	<?php echo $err?>
</body>
</html>



Fuente : PHP crypt Manual

pero no supe como usarlas xD. no me salian si ponia el crypt sha256 o el crypt sha512 u.u me salian signos raros caracteres especiales una forma rara que no lo habia visto igual funcionaba pero si no estaba bien codificado no se veian los signos me salian signos de pregunta :) mejor creo xD por que mientras que el php lo entienda todo bien n.n era asi en vez de poner esta linea:

si ponia eso me salian los signos raros que les digo
y ya solo poniendo en vez en if antes de poner crypt ponia hash ejemplo:

function cryptPass($input, $rounds = 9) {
	$salt = null;
	$saltChars = array_merge(range('A','Z'), range('a','z'), range('0','9'));
	for($i = 0; $i < 22; $i++) {
      $salt .= $saltChars[array_rand($saltChars)];
	}
	return hash("sha512", $input, sprintf('$2y$%02d$', $rounds) . $salt);
}
$err = null;
if(isset($_POST["password"])) {
$inputPass = $_POST["password"]; // value recibido del campo del formulario
$pass = "holas";
$hashedPass = cryptPass($pass);
echo $hashedPass;
if(hash("sha512", $inputPass, $hashedPass) == $hashedPass) {
$err = "<br /> password match";
} else {
$err = "<br /> password not match";
}
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="ISO-8859-1">
	<title>Document</title>
</head>
<body>
	<form action="<?=$_SERVER["PHP_SELF"];?>" method="post">
     <input type="text" name="password" />
     <input type="submit" value="Send" />
	</form>
	<?php echo $err?>
</body>
</html>


saldria algo como esto:

îñ¤Ó÷”ýø(üAdžM(šÞ.Žy'ê´¹HÜ ÅȘ(:°jÅÆÔpTùVÜö"Y“p4 54ÍùëaµŠ

igualmente al comprobarlos si pones holas en el campo de texto seria correcto y si no pues logico que no xD daria error, no se si esto sea mejor o no que la otra forma o ustedes que piensan?

ya lo resolvi pero aun quisiera preguntar si hay otra forma mas segura de encryptar la contraseñas?
y si se saben una porfa pongan el ejemplo, ya luego esto les servira a otras personas :) y a mi xD.
Tags: Algorithm - Best Practices - Encryption - HASH - Password - PHP - Question - Suggestion Votes: 3 - Answers: 5 - Views: 28 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 22-11-2015 06:07:46 Hola
    Yo he hecho un tema parecido aqui
    te dejo el link

    Saludos
      Votes: 3 - Link answer
     
  • Date: 22-11-2015 07:34:32 Hola tal como dice Walter este tema ya lo habías hecho si te daba pereza de pronto buscar en la lista de preguntas puedes ir al Menu > Perfil > Mis Preguntas o Respuestas y ahí puedes ver todo lo que has hecho en la comunidad.   Votes: 0 - Link answer
     
  • Date: 22-11-2015 21:40:49 Eso es cierto walter ^^ yo solo esperaba que otros usuarios pusieran sus sugeriencias :) ese aporte tuyo yo ya lo habia visto en ese entonces no le habia entendido ^^
    Ademas puse esto como un aporte para aquellos que aun no entiendan tambien n.n por eso deje opciones y documentacion.

    Gracias ElCapa por comentar yo ya sabia eso pero bueno :)

    Saludos.
      Votes: 2 - Link answer
     
  • Date: 23-11-2015 03:46:24 Hola comunidad le comparto estos codigos para encriptar y desencriptar


    
    
    function encrypt($string) {
    
        $result = '';
        $key = '2016';
        for ($i = 0; $i < strlen($string); $i++) {
            $char = substr($string, $i, 1);
            $keychar = substr($key, ($i % strlen($key)) - 1, 1);
            $char = chr(ord($char) + ord($keychar));
            $result.=$char;
        }
        return base64_encode($result);
    }
    
    
    function decrypt($string) {
        $result = '';
        $string = base64_decode($string);
        $key = '2016';
        for ($i = 0; $i < strlen($string); $i++) {
            $char = substr($string, $i, 1);
            $keychar = substr($key, ($i % strlen($key)) - 1, 1);
            $char = chr(ord($char) - ord($keychar));
            $result.=$char;
        }
        return $result;
    }
    
    
    /* Key para desencriptar es 2016  es por ello que cuando llamo a la funcion decrypt como segundo 
    parametro paso el key q es "2016" */
    
    
    /* Encriptar*/
    
    echo "<b>Encriptar</b><br/>"; 
    echo encrypt('mi_password')."<br/><br/><br/>";
    
    
    /* Desencriptar*/
    echo "<b>Desencriptar</b><br/>"; 
    echo decrypt("o5uPoZelo6ilpJQ=",'2016')."<br/>";
    
    
    
    
      Votes: 5 - Link answer
     
  • Date: 23-11-2015 15:33:19 Gracias por tu aporte Juan.   Votes: 3 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com