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, usernamepassword등의 양식을 사용하여, 당신하기 전에 데이터베이스에 데이터를 삽입, 당신은 해시 것 데이터를 확인한 후 암호. 자세한 내용 은 설명서 를 참조하십시오 .

최신 정보:

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

따라서 $hashedPassword데이터베이스에 삽입 합니다. 희망은, 지금은 분명 당신이 다음 혼동 여전히 경우 난 당신이 몇 가지 자습서를 읽는 몇 가지 스크린 캐스트 보는 것이 좋습니다 laracasts.comtutsplus.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.