2014-06-24 92 views
6

Ben Auth::attempt() yöntemini kullanarak bir kullanıcının kimliğini doğrulamak için çalışıyorum ve başarısız tutar verir, bu yüzden sonunda aşağıdaki kodla sona erdi:laravel 4 - Aynı şifreyi Hashing farklı değerler

$arr = array(); 
$arr['verified'] = Hash::make('1234') . ' ; ' . Hash::make('1234'); 
return json_encode($arr); 

ve bu sonucudur :

{"verified":"$2y$10$V4yXBUcxealfLrzOE\/xAD.sJ8qpNhrMA6K6dENBBXYqaVx1zSETgy ; $2y$10$C9xpOWLTUyfy1KL.Y3Tot.KWADmQYFK\/HAf6uZGGXTKcVh52qHS4m"} 

Gördüğünüz gibi, ilk karma $2y$10$V4yXBUcxealfLrzOE\/xAD.sJ8qpNhrMA6K6dENBBXYqaVx1zSETgy verir ve ikinci karma verir $2y$10$C9xpOWLTUyfy1KL.Y3Tot.KWADmQYFK\/HAf6uZGGXTKcVh52qHS4m

T Veritabanında saklanmamalı olsa da, 60 karakterlik şifre alanım var.

Herhangi bir fikrin var mı?

cevap

25

Bu mükemmel para cezası ve ayrıca yolu çalışmak gerekiyordu olduğunu. Laravel, Hashing için Bcrypt kullanır ve bu nedenle karma işlem sırasında rasgele bir tuz üretir. Tuz, Hash'un bir parçası olacak ve bu yüzden iki farklı sonuç elde ediyorsunuz.

veryfing algoritması otomatik dikkate tuz atıyor. Bu yöntem, gökkuşağı tablolarının kullanımını neredeyse imkansız hale getirir.

Bir böcek değil, hiç çaba harcamadan ekstra güvenlik var. senin sağlamalarının her ikisi de doğru dönecektir karşı veryfing sizin örneğe göre

:

<?php 

$hash1 = Hash::make('1234'); // A hash is generated 
$hash2 = Hash::make('1234'); // Another hash is generated that differs from the first one 

var_dump(Hash::check('1234', $hash1) && Hash::check('1234', $hash2)); 

$hash1 rağmen ve $hash2 true değerlendirecek verilen taban dize ile onlara karşı veryfing, farklı karmaları içerir.

üretilen karma 60 karakter bir uzunluğa sahiptir. Bu yüzden karma da depolanan sütun 60 karakter

+0

minimum boyuta sahip olduğundan emin yapılmış Fakat o nasıl benzerlikler nelerdir, veritabanında karma şifreyi saklamak gerekir olmalıdır? Çünkü şifre her zaman 1234 değil. Bunu “Auth :: attempt()” yöntemiyle nasıl kullanabilirim? –

+1

user3723418 @ - rastgele tuz çıkan sağlama değeri bir parçası haline gelecek, bu tuz sadece() 'sizin için otomatik olarak yapar' Hash :: çek kullanmak, girilen şifreyi doğrulamak için saklanan karma değeri elde edilir. Auth :: attempt() yöntemini kullanarak – martinstoeckli

+1

@ user3723418 daha da kolay. Veritabanınızdaki karma tuzu elinize geçer geçmez (doğru db tasarımı varsayılmıştır) laravel, veri tabanındaki alanlara karşı girişi otomatik olarak kontrol edecektir. Db'de bir parola alanı ve dizinizde bir parola anahtarı varsa, 'Auth :: attempt()' yöntemine geçiş yaparsınız, laravel otomatik olarak bu iki değeri dikkate alarak karmayı dikkate alır ve oturum işlemeyi gerçekleştirir. – thpl