Laravel karma şifresi nasıl oluşturulur


94

Laravel için karma bir şifre oluşturmaya çalışıyorum. Şimdi birisi Laravel hash helper'ı kullanmamı söyledi ama bulamıyorum ya da yanlış yöne bakıyorum.

Nasıl laravel karma şifre oluşturabilirim? Ve nerede?

Düzenleme: Kodun ne olduğunu biliyorum ama nerede ve nasıl kullanacağımı bilmiyorum, bu yüzden bana karma şifreyi geri veriyor. Hashing uygulanmış parolayı alırsam, veritabanına manuel olarak ekleyebilirim


1
Laravel'de Hash ve Verify Hash'in nasıl yapıldığını kontrol edin.
Somnath Muluk

2
Sadece manuel olarak karma bir şifre oluşturmak için burada bulunanlarınız için, aşağıdaki cevabı ile kullanabilirsiniz php artisan tinker. Örneğin,echo Hash::make('yourpassword')
sinaza

Yanıtlar:


184

Bcrypt Kullanarak Bir Parolanın Hashingini Oluşturmak Laravel:

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

Bu, karma bir parola oluşturacaktır. Bunu denetleyicinizde veya hatta bir modelde kullanabilirsiniz, örneğin, bir kullanıcı POSTyöntem kullanarak denetleyicinize bir form kullanarak bir parola gönderirse, şunun gibi bir şey kullanarak hashing uygulayabilirsiniz :

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

Burada, $hashedkarma şifreyi içerecek. Örneğin, bu nedenle, yeni bir kullanıcı kayıt / oluştururken, kullanıcının gönderdiği gibi ayrıntıları Temelde, sen yapacağım name, email, usernameve passwordvb Form kullanarak, o zaman önce veritabanına veri ekleme, sen karma edeceğiz verileri doğruladıktan sonra şifre. Daha fazla bilgi için dokümanları okuyun .

Güncelleme:

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

Yani, $hashedPasswordveritabanına ekleyeceksiniz . Umarım, şimdi anlaşıldı ve hala kafanız karıştıysa , bazı eğitimleri okumanızı, laracasts.com ve tutsplus.com'da bazı ekran yayınlarını izlemenizi ve ayrıca bir kitap okumanızı öneririmLaravel , bu ücretsiz bir e-kitap , indirebilirsiniz.

Güncelleme: yana OPelle şifrelemek şifre istekleri laravel kullanarak Hashbu kullanarak alternatif bir yoldur, böylece herhangi bir sınıf veya form olmadan artisan tinkeristemi komutundan:

  1. Komut isteminize / terminalinize gidin
  2. LaravelKuruluma gidin (projenizin kök dizini)
  3. cd <directory name>Komut isteminden / terminalden kullanın ve enter tuşuna basın
  4. Ardından yazın php artisan tinkerve enter tuşuna basın
  5. Sonra yaz echo Hash::make('somestring');
  6. Konsolda karma bir parola alacak, kopyalayacak ve sonra yapmak istediğinizi yapacaksınız.

Güncelleme (Laravel 5.x):

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


Ama bunu nerede yapmalıyım? Buna birkaç kez rastladım.
Graham

Sanırım yanlış bir soru yaptım. Veritabanım (başkasından aldığım) yalnızca kullanıcılar için şifreleri karma hale getirdi. Şimdi laravel tarafından karma hale getirilmesi gereken bir şifre oluşturmak istiyorum. Hashing uygulanmış bir şifreyi nasıl oluşturabilirim, böylece bunu db.
Graham

Yanıtladığım şey buydu, bir şifreyi kaydetmek dbiçin şifrelemeniz gerekiyor, bu yüzden düz bir şifreden kullanarak şifreleyip Hash::make('passwordstring');bu karma şifreyi veri tabanına kaydedeceksiniz.
The Alpha

Ama bunu nasıl yaparım? Örneğin, bir php dosyası oluşturursam, bu çalışmaz. Anlayacağınız gibi, Laravel'de oldukça yeniyim
Graham

Sanırım hala yanıltıcı bir sorum var. Çünkü ne dediğini anlıyorum. Ama bu kodu nerede kullanmalıyım? Hangi dosyada veya ...? Çünkü bunu sadece bir kez kullanacağım. Bir kullanıcı veya başka bir şey ekleyebileceğim bir tür form için değil.
Graham

17

Laravel 5 kullanır bcrypt. Yani bunu da yapabilirsiniz.

$hashedpassword = bcrypt('plaintextpassword');

veritabanı tablonuzun şifre alanına kaydedebileceğiniz çıktı.

Fn Ref: bcrypt


Bu işlevi nereden alıyorsunuz, PHP veya Laravel'in bir parçası değil mi?
martinstoeckli

1
@martinstoeckli Oh, bu L5, laravel.com/docs/5.0/hashing#basic-usage
Nagendra

Görünüşe göre son Laravel 5.1 laravel.com/docs/5.1/helpers#method-bcrypt
Nagendra Rao

2
@Fusion bcrypt bir şifreleme algoritması değil, bir karma algoritmadır, karma oluşturma ile bunun için karma oluşturulduktan sonra düz metni geri alamazsınız. Hashing algoritmasının bütün noktası budur. Yapabileceğiniz tek şey, düz bir metnin sahip olduğunuz hash ile eşleşip eşleşmediğini kontrol etmektir.
Nagendra Rao

1
@FreddySidauruk Bu işe yaramaz çünkü bcrypt, giriş parolası aynı olsa bile her seferinde farklı bir karma oluşturur. checkYöntemi kullanmanız gerekecek : if (Hash::check('secret', $hashedPassword)) { // The passwords match... }Ref: laravel.com/docs/5.1/hashing Düzenle: Size yardımcı olduysa yanıtı eklemeyi unutmayın;)
Nagendra Rao

11

Laravel Hash cephesi, kullanıcı şifrelerini saklamak için güvenli Bcrypt hash'i sağlar.

Temel kullanım için iki şey gereklidir:

Önce Cepheyi dosyanıza ekleyin

use Illuminate\Support\Facades\Hash;

ve MakeParola oluşturmak için Yöntem'i kullanın.

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

ve Hashed dizesini eşleştirmek istediğinizde aşağıdaki kodu kullanabilirsiniz:

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

Hashing için aşağıdaki Laravel belge bağlantısıyla daha fazla bilgi edinebilirsiniz: https://laravel.com/docs/5.5/hashing


7

Parolayı veritabanında saklamak için parola karması yapın ve ardından kaydedin.

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

Parolayı doğrulamak için, veritabanından hesabın depolanmış parolasını alın

// $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
Bu yanıtı seviyorum çünkü
Hash'in

6

Laravel'in tam anlamıyla nasıl çalıştığını anlamak istiyorsanız, tüm sınıfı Github'da inceleyebilirsiniz: https://github.com/illuminate/hashing/blob/master/BcryptHasher.php

Ancak temelde bununla ilgili üç PHP yöntemi vardır:

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

Karma parola, laravel 5.x bcrypt parolasıyla aynıdır. Tuz ve maliyet vermeye gerek yok, varsayılan değerlerini alacaktır.

Bu yöntemler laravel sınıfında uygulanmıştır, ancak daha fazla bilgi edinmek istiyorsanız lütfen resmi belgeleri inceleyin: http://php.net/manual/en/function.password-hash.php


İşler. Yalnızca veritabanı erişimi varsa parolayı sıfırlamak için kullanılabilir.
air4x

2

Aşağıdakileri kullanabilirsiniz:

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

Daha fazla bilgi bulabilirsiniz: burada


1

BcryptHasher.php'de hash kodunu bulabilirsiniz:

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

örneğin- $ düz metin = 'metin'; $ hashed-text = Hash :: make ('metin');


Evet. Bu doğru yoldur. Illuminate \ Support \ Facades \ Hash kullanmanız gerekir. Teşekkür ederim!
Nole

1

İşte çözüm:

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

Not: Kontrol cihazınızın en başında 1. satır kodunu kullanın. Son olarak, en az değil, gönderildikten sonra verilerle işlemek istediğiniz denetleyicinizin işlevi içinde kalan iki kod satırını kullanın. Mutlu kodlamalar :)


0

Parolayı laravel ve lümen cinsinden karşılaştırın:

Bu, bcrypt işlevinin php7 ile çalışmaması olası olabilir, daha sonra gereksinimlerinize göre aşağıdaki kodu laravel ve lümen olarak kullanabilirsiniz:

use Illuminate\Support\Facades\Hash;

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

Umarım bu yardım sizi mutlu eder :)


-5

tamam, bu hash.php'deki make işlevinden bir alıntıdır.

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

Sadece bir php dosyasına kopyalayıp yapıştırın ve çalıştırın.


1
Bu GERÇEKTEN kötü bir uygulamadır. Kriptografide çok becerikli değilseniz, sadece yerleşik halihazırda yapılmış hashing işlevlerini kullanmalısınız.
Nick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.