Intereting Posts

Как использовать шифрование SHA1 вместо BCrypt в Laravel 4?

Я разрабатываю так называемый AAC (Automatic Account Creator) для игры, это в основном сайт с функциями для создания учетных записей, игроков и еще нескольких вещей для игроков. Сервер поддерживает только SHA1 и обычный – что абсолютно небезопасно. Я не могу погрузиться в исходный код и внести изменения. Если в любом случае использовать SHA1, я был бы благодарен. Я просто прочитал о BCrypt, это здорово, но я не могу изменить исходный код в соответствии с BCrypt. Мне удалось установить SHA1 на регистрацию следующим образом:

$password = $input['password']; $password = sha1($password); 

Но я просто не могу войти. я делаю это неправильно? похоже, что Laravel не позволит мне войти.

У меня есть get_register и post_register , также у меня есть get_login и post_login . Нужно ли мне что-то менять в post_login, чтобы заставить его войти или? любые подсказки?

Я использую php-сервер Laravel (php artisan serve) и phpMyAdmin на WAMP. Я думаю, что Laravel проверяет, когда вы проверяете DB с помощью метода Auth::attempt try. Laravel выполняет некоторую форму хэширования, чтобы проверить текущий pw и зарегистрированный в одном, чтобы проверять друг друга.

Вам придется переписать модуль Hash . Благодаря идеям Ларавела о концепциях IoC и Dependency Injection, это будет относительно легко.

Сначала создайте папку app/libraries и добавьте ее в autoload.classmap :

 "autoload": { "classmap": [ // ... "app/libraries" ] }, 

Теперь пришло время создать наш класс. Создайте класс SHAHasher , реализуя Illuminate\Hashing\HasherInterface . Нам нужно реализовать три метода: make , check и needsRehash .

Примечание. На Laravel 5 реализуйте Illuminate/Contracts/Hashing/Hasher вместо Illuminate\Hashing\HasherInterface .

приложение / библиотеки / SHAHasher.php

 class SHAHasher implements Illuminate\Hashing\HasherInterface { /** * Hash the given value. * * @param string $value * @return array $options * @return string */ public function make($value, array $options = array()) { return hash('sha1', $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; } } 

Теперь, когда мы сделали свой класс, мы хотим, чтобы он использовался по умолчанию, Laravel. Для этого мы создадим SHAHashServiceProvider , SHAHashServiceProvider Illuminate\Support\ServiceProvider и зарегистрируем его как hash компонент:

приложение / библиотеки / SHAHashServiceProvider.php

 class SHAHashServiceProvider extends Illuminate\Support\ServiceProvider { /** * Register the service provider. * * @return void */ public function register() { $this->app['hash'] = $this->app->share(function () { return new SHAHasher(); }); } /** * Get the services provided by the provider. * * @return array */ public function provides() { return array('hash'); } } 

Круто, теперь все, что нам нужно сделать, это убедиться, что наше приложение загружает правильного поставщика услуг. В app/config/app.php , под providers , удалите следующую строку:

 'Illuminate\Hashing\HashServiceProvider', 

Затем добавьте следующее:

 'SHAHashServiceProvider', 

На самом деле существует более простое (или более простое, по крайней мере) решение для такого случая. вы можете «подделать» хэширование, используя этот метод в пользовательской модели:

 public function getAuthPassword() { return Hash::make($this->password); } 

И хеширование ввода с помощью собственной хэш-функции. Например, если ваши пароли в настоящее время хэшируются с помощью sha1, вы можете проверить пользователя с помощью

 Auth::attempt(array('email' => $email, 'password' => sha1($password)) 

Это не похоже на хорошую практику кодирования, чтобы сделать это таким образом, но это, безусловно, будет проще, чем переписать хеш-модуль.