Laravel 해시 된 암호를 만드는 방법


94

Laravel에 대한 해시 된 암호를 만들려고합니다. 이제 누군가가 Laravel 해시 도우미를 사용하라고했지만 찾을 수 없거나 잘못된 방향을 찾고 있습니다.

Laravel 해시 된 비밀번호는 어떻게 만듭니 까? 그리고 어디?

편집 : 코드가 무엇인지 알고 있지만 어디서 어떻게 사용하는지 모르기 때문에 해시 된 암호를 다시 제공합니다. 해시 된 암호를 받으면 데이터베이스에 수동으로 삽입 할 수 있습니다.


1
Laravel에서 해시 를 만들고 해시 를 확인하는 방법을 확인하십시오 .
— Somnath Muluk 2015

2
해시 된 암호를 수동으로 생성하기 위해 여기에있는 사람들을 위해 아래 답변을 php artisan tinker. 예 :echo Hash::make('yourpassword')
— sinaza

답변:


184

Bcrypt를 사용하여 암호 해싱 Laravel:

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

해시 된 암호가 생성됩니다. 예를 들어 사용자가 양식을 사용하여 POST메서드를 사용하여 컨트롤러에 암호를 제출하면 다음과 같이 해시 할 수 있습니다.

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

여기 $hashed에는 해시 된 암호가 포함됩니다. 예를 들어, 그래서, 새로운 사용자를 등록 / 생성 할 때 사용자을 제출이 같은 사항 경우 기본적으로, 당신은 그것을 할 것이다 name, email, username과 password등의 양식을 사용하여, 당신하기 전에 데이터베이스에 데이터를 삽입, 당신은 해시 것 데이터를 확인한 후 암호. 자세한 내용 은 설명서 를 참조하십시오 .

최신 정보:

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

따라서 $hashedPassword데이터베이스에 삽입 합니다. 희망은, 지금은 분명 당신이 다음 혼동 여전히 경우 난 당신이 몇 가지 자습서를 읽는 몇 가지 스크린 캐스트 보는 것이 좋습니다 laracasts.com 및 tutsplus.com을 도에 관한 책을 읽고 Laravel, 이 무료 전자 책입니다 , 당신이 그것을 다운로드 할 수 있습니다.

업데이트 : 클래스 나 양식없이 OPLaravel Hash을 사용하여 수동으로 암호를 암호화 하기를 원 하므로 artisan tinker명령 프롬프트에서 사용하는 다른 방법입니다 .

  1. 명령 프롬프트 / 터미널로 이동
  2. 받는 이동 Laravel설치 (프로젝트의 루트 디렉토리)
  3. cd <directory name>명령 프롬프트 / 터미널에서 사용 하고 Enter 키를 누릅니다.
  4. 그런 다음 쓰고 php artisan tinkerEnter 키를 누릅니다.
  5. 그런 다음 echo Hash::make('somestring');
  6. 콘솔에서 해시 된 암호를 받고 복사 한 다음 원하는 작업을 수행합니다.

업데이트 (Laravel 5.x) :

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


그러나 나는 이것을 어디에서해야합니까. 나는 이것을 몇 번 보았다.
— Graham

잘못된 질문을 한 것 같습니다. 내 데이터베이스 (다른 사람에게서받은)는 사용자의 암호 만 해시했습니다. 이제 laravel에 의해 해시되어야하는 암호를 만들고 싶습니다. DB에 입력 할 수 있도록 해시 된 암호를 생성하려면 어떻게해야합니까?
— Graham

이것이 제가 대답 한 것입니다. 암호를 저장하려면 암호 db를 암호화해야하므로 일반 암호를 사용하여 암호화 Hash::make('passwordstring');한 다음이 해시 된 암호를 데이터베이스에 저장합니다.
— The Alpha

하지만 어떻게해야합니까? 예를 들어 PHP 파일을 생성하면 작동하지 않습니다. 이해 하시겠지만 저는 laravel을 처음 접했습니다
— Graham

여전히 잘못된 질문이있는 것 같습니다. 나는 당신이 말하는 것을 이해하기 때문입니다. 하지만이 코드는 어디에서 사용해야합니까? 어떤 파일 또는 ...? 이건 한 번만 사용 하니까. 사용자 나 무언가를 추가 할 수있는 형태가 아닙니다.
— Graham

17

라 라벨 5는 bcrypt. 그래서 당신도 할 수 있습니다.

$hashedpassword = bcrypt('plaintextpassword');

데이터베이스 테이블의 비밀번호 필드에 저장할 수있는 출력.

Fn 참조 : bcrypt


이 함수는 어디에서 얻습니까? PHP의 일부가 아니거나 Laravel입니까?
— martinstoeckli

1
그것이 오 @martinstoeckli, 그것은 L5의 도우미 함수이며, laravel.com/docs/5.0/hashing#basic-usage
— Nagendra 라오

그것처럼 보인다는 최근 Laravel 5.1에 도입 된 laravel.com/docs/5.1/helpers#method-bcrypt
— Nagendra 라오을

2
@Fusion bcrypt는 암호화 알고리즘이 아닌 해싱 알고리즘입니다. 해싱을 사용하면 해시가 생성되면 일반 텍스트를 다시 가져올 수 없습니다. 이것이 해싱 알고리즘의 요점입니다. 당신이 할 수있는 유일한 일은 당신이 가지고있는 해시와 일반 텍스트가 일치하는지 확인하는 것입니다.
— Nagendra Rao

1
@FreddySidauruk 입력 된 암호가 동일하더라도 bcrypt가 매번 다른 해시를 생성하기 때문에 작동하지 않습니다. 당신은 사용해야합니다 check: 방법 if (Hash::check('secret', $hashedPassword)) { // The passwords match... }참조 : laravel.com/docs/5.1/hashing의 ) 당신을 도움이 경우 음주 대답을 upvote에하는 것을 잊지 : 편집
— Nagendra 라오

11

Laravel Hash 파사드는 사용자 암호를 저장하기위한 안전한 Bcrypt 해싱을 제공합니다.

기본 사용에는 두 가지가 필요합니다.

먼저 파일에 Facade를 포함합니다.

use Illuminate\Support\Facades\Hash;

Make방법을 사용 하여 암호를 생성하십시오.

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

Hashed 문자열과 일치 시키려면 아래 코드를 사용할 수 있습니다.

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

Hashing에 대한 아래의 Laravel 문서 링크에서 자세히 알아볼 수 있습니다. https://laravel.com/docs/5.5/hashing


7

데이터베이스에 비밀번호를 저장하려면 비밀번호 해시를 만들어 저장합니다.

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

비밀번호를 확인하려면 데이터베이스에서 계정에 저장된 비밀번호를 가져옵니다.

// $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 
}

4
해시 위치 (를 분명히 \ 지원 \ 외관 \ 해시)이 곳은 알려주기 때문에 나는이 대답을 사랑
— shintaroid

6

laravel이 어떻게 작동하는지 이해하려면 Github에서 전체 클래스를 검토 할 수 있습니다. https://github.com/illuminate/hashing/blob/master/BcryptHasher.php

그러나 기본적으로 여기에는 세 가지 PHP 메서드가 있습니다.

$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 ));

해시 된 비밀번호는 laravel 5.x bcrypt 비밀번호와 동일합니다. 소금과 비용을 줄 필요가 없으며 기본값을 사용합니다.

이러한 메소드는 laravel 클래스에서 구현되었지만 더 자세히 알아 보려면 공식 문서를 검토하십시오. http://php.net/manual/en/function.password-hash.php


공장. 데이터베이스 액세스 만 사용할 수있는 경우 암호를 재설정하는 데 사용할 수 있습니다.
— air4x

2

다음을 사용할 수 있습니다.

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

자세한 정보는 여기에서 찾을 수 있습니다.


1

BcryptHasher.php에서 해시 코드를 찾을 수 있습니다.

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;
}

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

예 : $ plain-text = '텍스트'; $ hashed-text = 해시 :: make ( 'text');


예. 이것이 올바른 방법입니다. Illuminate \ Support \ Facades \ Hash를 사용해야합니다. 감사합니다!
— Nole

1

해결책은 다음과 같습니다.

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

주의 : 컨트롤러의 맨 처음에 첫 번째 줄 코드를 사용하십시오. 마지막으로, from이 제출 된 후 데이터로 조작하려는 컨트롤러의 함수 내에서 나머지 두 줄의 코드를 사용하십시오. 해피 코딩 :)


0

laravel과 lumen의 비밀번호 비교 :

이것은 bcrypt 기능이 php7에서 작동하지 않을 수 있으며 요구 사항에 따라 laravel 및 lumen에서 아래 코드를 사용할 수 있습니다.

use Illuminate\Support\Facades\Hash;

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

이 도움이 당신을 행복하게 해주길 바랍니다 :)


-5

좋아요, 이것은 hash.php의 make 함수에서 발췌 한 것입니다.

    $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);

PHP 파일에 복사 / 붙여 넣기 만하면됩니다.


1
이것은 정말 나쁜 습관입니다. 암호화에 능숙하지 않다면 이미 만들어진 해싱 함수를 사용하기 만하면됩니다.
— Nick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.