Comment puis-je utiliser le hachage MD5 pour les mots de passe dans Laravel?
Je suis le portage sur une application héritée dans Laravel. L'ancienne application utilisée MD5 de hachage des mots de passe sans sel, j'ai donc besoin de répliquer que, dans Laravel. Pour l'enregistrement, nous sont en train de changer les mots de passe de bcrypt avec un sel, mais ce n'est pas un processus simple qui nécessite un nom d'utilisateur pour le faire - pour l'instant, j'ai juste besoin d'obtenir des connexions de travail avec l'héritage des hachages.
J'ai suivi ce guide pour convertir Auth::hash
MD5: Comment utiliser le chiffrement SHA1 au lieu de BCrypt dans Laravel 4?
Quand j'imprime le mot de passe en texte brut et le hachage généré dans mon make
méthode lors de l'enregistrement d'un compte:
public function make($value, array $options = array()) {
echo $value.'<br>'.hash('md5', $value);
exit;
return hash('md5', $value);
}
Je reçois le texte suivant:
123456
e10adc3949ba59abbe56e057f20f883e
Grand, c'est ce dont j'ai besoin. Toutefois, lorsque cela est enregistré dans la base de données, je reçois un hachage différent totalement. Ma conjecture est que Laravel est saler le mot de passe ailleurs, mais je ne trouve pas où et comment le modifier.
Mon MD5Hasher.php
fichier à l'intérieur de app/libraries
:
<?php
class MD5Hasher implements Illuminate\Contracts\Hashing\Hasher {
/**
* Hash the given value.
*
* @param string $value
* @return array $options
* @return string
*/
public function make($value, array $options = array()) {
return hash('md5', $value);
}
/**
* Check the given plain value against a hash.
*
* @param string $value
* @param string $hashedValue
* @param array $options
* @return bool
*/
public function check($value, $hashedValue, array $options = array()) {
return $this->make($value) === $hashedValue;
}
/**
* Check if the given hash has been hashed using the given options.
*
* @param string $hashedValue
* @param array $options
* @return bool
*/
public function needsRehash($hashedValue, array $options = array()) {
return false;
}
}
Mon MD5HashServiceProvider.php
:
<?php
class MD5HashServiceProvider extends Illuminate\Support\ServiceProvider {
/**
* Register the service provider.
*
* @return void
*/
public function register() {
$this->app['hash'] = $this->app->share(function () {
return new MD5Hasher();
});
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides() {
return array('hash');
}
}
Mon AuthController.php
se présente comme suit:
<?php
namespace App\Http\Controllers\Auth;
use Hash;
use App\User;
use Validator;
use Mail;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
class AuthController extends Controller
{
/*
|--------------------------------------------------------------------------
| Registration & Login Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users, as well as the
| authentication of existing users. By default, this controller uses
| a simple trait to add these behaviors. Why don't you explore it?
|
*/
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
//protected $redirectTo = '/account';
/**
* Create a new authentication controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest', ['except' => 'getLogout']);
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
$this->redirectTo = '/register/step-1';
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
//email the user
Mail::send('emails.register', ['user' => $user], function($message) use ($user)
{
$message->to($user->email, $user->name)->subject('Edexus - Welcome');
});
//email the admin
Mail::send('emails.register-admin', ['user' => $user], function($message) use ($user)
{
$message->to('admins@***.com', 'Edexus')->subject('Edexus - New user sign up');
});
return $user;
}
}
merci pour le commentaire pénétrant. Je ne suis pas en utilisant SHA1, je suis en utilisant un MD5 (ce qui est encore pire), mais il fait partie d'un processus de migration de salé bcrypt.
Les mots de passe peuvent être hachées, soit dans le Modèle d'Utilisateur ou dans l'action authcontroller et les traits pertinents. Vous avez besoin de regarder là-bas pour le hachage ou veuillez fournir les fichiers pour pouvoir les aider.
J'ai ajouté mon AuthController.php à la question. J'ai
dd
la Hash::make
au point d'appeler User::create()
et le hachage est différente de celle qui a été enregistré.désolé pour ça. LOL. J'ai pensé que vous aimeriez utiliser SHA1 en raison de this -> Comment utiliser le cryptage SHA1 au lieu de BCrypt dans Laravel 4?
OriginalL'auteur Mike | 2015-11-06
Vous devez vous connecter pour publier un commentaire.
Découvrez le mot de passe mutateur dans votre Modèle Utilisateur. C'est le hachage du mot de passe d'un autre temps après le hachage dans le contrôleur.
Ma recommandation est de hacher le mot de passe une fois dans votre création() et la mise à jour() du modèle d'événements, et l'enlever de la mutateur et de contrôleur.
OriginalL'auteur Mina Abadir
etape 1: créer app/bibliothèques de dossier et l'ajouter à du compositeur autoload.classmap
étape 2: créer deux fichier php MD5Hasher.php et MD5HashServiceProvider dans app/bibliothèques
MD5Hasher.php
MD5HashServiceProvider.php
etape 3: Masquer ou Supprimer "Éclairer\Hachage\HashServiceProvider::classe" dans config/app.php et d'ajouter "App\Libraries\MD5HashServiceProvider::classe"
OriginalL'auteur Suwarnakumar Kanapathipillai