Cómo crear una contraseña hash laravel

94

Estoy tratando de crear una contraseña hash para Laravel. Ahora alguien me dijo que usara el ayudante de hash de Laravel, pero parece que no puedo encontrarlo o estoy mirando en la dirección incorrecta.

¿Cómo creo una contraseña hash laravel? ¿Y donde?

Editar: sé cuál es el código, pero no sé dónde ni cómo usarlo, por lo que me devuelve la contraseña hash. Si obtengo la contraseña hash, puedo insertarla manualmente en la base de datos

Graham
fuente
1
Compruebe cómo hacer Hash y Verificar Hash en Laravel.
Somnath Muluk
2
Para aquellos de ustedes que están aquí para crear manualmente una contraseña hash, pueden usar la respuesta a continuación con php artisan tinker. Por ejemplo,echo Hash::make('yourpassword')
sinaza

Respuestas:

184

Hashing de una contraseña usando Bcrypt en Laravel:

$password = Hash::make('yourpassword');

Esto creará una contraseña hash. Puede usarlo en su controlador o incluso en un modelo, por ejemplo, si un usuario envía una contraseña usando un formulario a su controlador usando el POSTmétodo, entonces puede usar un hash usando algo como esto:

$password = Input::get('passwordformfield'); // password is form field
$hashed = Hash::make($password);

Aquí, $hashedcontendrá la contraseña hash. Básicamente, lo vas a hacer al crear / registrar un nuevo usuario, por lo que, por ejemplo, si un usuario envía los detalles tales como, name, email, usernamey passwordetc mediante un formulario, a continuación, antes de insertar los datos en la base de datos, se le hash de la contraseña después de validar los datos. Para obtener más información, lea la documentación .

Actualizar:

$password = 'JohnDoe';
$hashedPassword = Hash::make($password);
echo $hashedPassword; // $2y$10$jSAr/RwmjhwioDlJErOk9OQEO7huLz9O6Iuf/udyGbHPiTNuB3Iuy

Entonces, insertará el $hashedPassworden la base de datos. Espero, ahora está claro y si aún estás confundido, te sugiero que leas algunos tutoriales, que veas algunas proyecciones de pantalla en laracasts.com y tutsplus.com y también leas un libro sobre Laravel, este es un libro electrónico gratuito , puedes descargarlo.

Actualización: dado que OPquiere cifrar manualmente la contraseña usando Laravel Hashsin ninguna clase o formulario, esta es una forma alternativa de usar artisan tinkerdesde el símbolo del sistema:

  1. Vaya a su símbolo del sistema / terminal
  2. Navega hasta la Laravelinstalación (el directorio raíz de tu proyecto)
  3. Use cd <directory name>y presione enter desde el símbolo del sistema / terminal
  4. Luego escribe php artisan tinkery presiona enter
  5. Luego escribir echo Hash::make('somestring');
  6. Obtendrá una contraseña hash en la consola, la copiará y luego hará lo que quiera hacer.

Actualización (Laravel 5.x):

// Also one can use bcrypt
$password = bcrypt('JohnDoe');

El alfa
fuente
Pero, ¿dónde debería hacer esto? Me encontré con esto varias veces.
Graham
Creo que hice una pregunta incorrecta. Mi base de datos (que obtuve de otra persona) solo tiene contraseñas hash para los usuarios. Ahora quiero crear una contraseña que laravel debería codificar. ¿Cómo puedo crear una contraseña hash para poder ingresar esto en el archivo db.
Graham
Eso es lo que he respondido, para guardar una contraseña db, debe cifrarla, por lo que, a partir de una contraseña simple, la cifrará usando Hash::make('passwordstring');y luego guardará esta contraseña hash en la base de datos.
The Alpha
¿Pero como hago esto? Si, por ejemplo, creo un archivo php, esto no funciona. Como comprenderás, soy bastante nuevo en Laravel
Graham
Creo que todavía tengo una pregunta engañosa. Porque entiendo lo que dices. Pero, ¿dónde debería usar este código? ¿En qué archivo o ...? Porque solo voy a usar esto una vez. No es por algún tipo de formulario que pueda agregar un usuario o algo.
Graham
17

Laravel 5 utiliza bcrypt. Entonces, también puedes hacer esto.

$hashedpassword = bcrypt('plaintextpassword');

salida de la cual puede guardar en el campo de contraseña de la tabla de la base de datos.

Fn Ref: bcrypt

Nagendra Rao
fuente
¿De dónde obtiene esta función, no es parte de PHP o Laravel, verdad?
martinstoeckli
1
@martinstoeckli Oh, lo es, es una función auxiliar en L5, laravel.com/docs/5.0/hashing#basic-usage
Nagendra Rao
Parece que se introdujo en el reciente Laravel 5.1 laravel.com/docs/5.1/helpers#method-bcrypt
Nagendra Rao
2
@Fusion bcrypt es un algoritmo hash, no un algoritmo de cifrado, con hash no se puede recuperar el texto sin formato una vez que se genera el hash. Este es el objetivo del algoritmo hash. Lo único que puede hacer es verificar si un texto sin formato coincide con el hash que tiene.
Nagendra Rao
1
@FreddySidauruk Eso no funcionará porque bcrypt genera un hash diferente cada vez, incluso si la contraseña de entrada es la misma. Tendrá que usar el checkmétodo: if (Hash::check('secret', $hashedPassword)) { // The passwords match... }Ref: laravel.com/docs/5.1/hashing Editar: No olvide votar la respuesta si le ha ayudado;)
Nagendra Rao
11

La fachada de Laravel Hash proporciona hash Bcrypt seguro para almacenar contraseñas de usuario.

El uso básico requería dos cosas:

Primero incluya la fachada en su archivo

use Illuminate\Support\Facades\Hash;

y use el Makemétodo para generar la contraseña.

$hashedPassword = Hash::make($request->newPassword);

y cuando desee hacer coincidir la cadena hash, puede usar el siguiente código:

Hash::check($request->newPasswordAtLogin, $hashedPassword)

Puede obtener más información con el enlace del documento de Laravel a continuación para Hashing: https://laravel.com/docs/5.5/hashing

Prashant Barve
fuente
7

Para almacenar la contraseña en la base de datos, haga un hash de la contraseña y luego guarde.

$password = Input::get('password_from_user'); 
$hashed = Hash::make($password); // save $hashed value

Para verificar la contraseña, obtenga la contraseña almacenada de la cuenta de la base de datos

// $user is database object
// $inputs is Input from user
if( \Illuminate\Support\Facades\Hash::check( $inputs['password'], $user['password']) == false) {
  // Password is not matching 
} else {
  // Password is matching 
}
Somnath Muluk
fuente
4
Me encanta esta respuesta porque dice dónde se encuentra Hash (Illuminate \ Support \ Facades \ Hash)
shintaroid
6

Si desea comprender cómo funciona exactamente laravel, puede revisar la clase completa en Github: https://github.com/illuminate/hashing/blob/master/BcryptHasher.php

Pero básicamente hay tres métodos PHP involucrados en eso:

$pasword = 'user-password';
// To create a valid password out of laravel Try out!
$cost=10; // Default cost
$password = password_hash($pasword, PASSWORD_BCRYPT, ['cost' => $cost]);

// To validate the password you can use
$hash = '$2y$10$NhRNj6QF.Bo6ePSRsClYD.4zHFyoQr/WOdcESjIuRsluN1DvzqSHm';

if (password_verify($pasword, $hash)) {
   echo 'Password is valid!';
} else {
   echo 'Invalid password.';
}

//Finally if you have a $hash but you want to know the information about that hash. 
print_r( password_get_info( $password_hash ));

La contraseña hash es la misma que la contraseña bcrypt de laravel 5.x. No es necesario dar sal y costo, tomará sus valores predeterminados.

Esos métodos se han implementado en la clase laravel, pero si desea obtener más información, consulte la documentación oficial: http://php.net/manual/en/function.password-hash.php

Jathin Prasad
fuente
Trabajos. Se puede utilizar para restablecer la contraseña si solo está disponible el acceso a la base de datos.
air4x
2

Puede utilizar lo siguiente:

$hashed_password = Hash::make('Your Unhashed Password');

Puede encontrar más información: aquí

Chris G
fuente
1

En BcryptHasher.php puedes encontrar el código hash:

public function make($value, array $options = array())
{
    $cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds;

    $hash = password_hash($value, PASSWORD_BCRYPT, array('cost' => $cost));

            $hash = password_hash($value, PASSWORD_BCRYPT, array('cost' => $cost));
            echo $value.' '.PASSWORD_BCRYPT.' '.$cost.' ';
            echo $hash;die();
    if ($hash === false)
    {
        throw new RuntimeException("Bcrypt hashing not supported.");
    }

    return $hash;
}
hendra1
fuente
1
use Illuminate\Support\Facades\Hash;
if(Hash::check($plain-text,$hashed-text))
    {
       return true;
    }
    else
    {
        return false;
    }

por ejemplo, $ texto sin formato = 'texto'; $ texto-hash = Hash :: make ('texto');

Dharmendra Patel
fuente
Si. Esta es la manera correcta. Necesita usar Illuminate \ Support \ Facades \ Hash. ¡Gracias!
Nole
1

Esta es la solucion:

use Illuminate\Support\Facades\Hash;    
$password = request('password'); // get the value of password field
$hashed = Hash::make($password); // encrypt the password

NB: Utilice el código de la primera línea al principio de su controlador. Por último, pero no menos importante, use las dos líneas restantes de código dentro de la función de su controlador donde desea manipular los datos después de que se envíe el. Feliz codificación :)

RashedRahat
fuente
0

Compare la contraseña en laravel y lumen:

Es posible que la función bcrypt no funcione con php7, entonces puede usar el siguiente código en laravel y lumen según sus requisitos:

use Illuminate\Support\Facades\Hash;

$test = app('hash')->make("test");
if (Hash::check('test', $test)) {
   echo "matched";
} else {
   echo "no matched";
}

Espero que esta ayuda te haga feliz :)

Kamlesh
fuente
-5

ok, esto es un extracto de la función make en hash.php

    $work = str_pad(8, 2, '0', STR_PAD_LEFT);

    // Bcrypt expects the salt to be 22 base64 encoded characters including
    // dots and slashes. We will get rid of the plus signs included in the
    // base64 data and replace them with dots.
    if (function_exists('openssl_random_pseudo_bytes'))
    {
        $salt = openssl_random_pseudo_bytes(16);
    }
    else
    {
        $salt = Str::random(40);
    }

    $salt = substr(strtr(base64_encode($salt), '+', '.'), 0 , 22);

    echo crypt('yourpassword', '$2a$'.$work.'$'.$salt);

Simplemente cópielo / péguelo en un archivo php y ejecútelo.

Fabián Valencia
fuente
1
Esta es REALMENTE una mala práctica. A menos que sea muy competente en criptografía, simplemente debe usar las funciones de hash integradas ya creadas.
Nick