我正在为一款游戏开发一个所谓的AAC(自动帐户创建者),它基本上是一个具有创建帐户,玩家和其他更多功能的站点。该服务器仅支持SHA1和Plain- 这是完全不安全的。我无法深入研究源代码并进行更改。如果有可以使用SHA1的信息,我将不胜感激。我刚刚阅读了BCrypt,这很棒,但是我不能真正更改源代码以适合BCrypt。我设法将SHA1这样注册:
$password = $input['password']; $password = sha1($password);
但是我根本无法登录。我做错了吗?好像Laravel不允许我登录。
我有get_register和post_register,还有我有get_login和post_login。我需要在post_login中进行更改以使其登录吗?有什么提示吗?
get_register
post_register
get_login
post_login
我在WAMP上使用Laravel的php服务器(php artisan服务)和phpMyAdmin。我认为Laravel会在您通过Auth::attempt方法laravel 检查数据库时进行检查,而laravel在进行某种形式的哈希检查以检查当前pw和已登录的pw以进行相互检查。
Auth::attempt
您将不得不重写该Hash模块。感谢Laravel遵循IoC和依赖注入概念的想法,这将相对容易。
Hash
首先,创建一个app/libraries文件夹并将其添加到作曲家的文件夹中autoload.classmap:
app/libraries
autoload.classmap
"autoload": { "classmap": [ // ... "app/libraries" ] },
现在,该创建类了。创建一个SHAHasher类,实现Illuminate\Hashing\HasherInterface。我们需要实现它的3种方法:make,check和needsRehash。
SHAHasher
Illuminate\Hashing\HasherInterface
make
check
needsRehash
注意: 在Laravel 5上,实现Illuminate/Contracts/Hashing/Hasher而不是Illuminate\Hashing\HasherInterface。
Illuminate/Contracts/Hashing/Hasher
app / libraries / 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,扩展Illuminate\Support\ServiceProvider并将其注册为hash组件:
SHAHashServiceProvider
Illuminate\Support\ServiceProvider
hash
app / libraries / 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,删除以下行:
app/config/app.php
providers
'Illuminate\Hashing\HashServiceProvider',
然后,添加以下内容:
'SHAHashServiceProvider',