当前位置: 首页 > 面试题库 >

如何在Laravel 4中使用SHA1加密代替BCrypt?

巫懿轩
2023-03-14
问题内容

我正在为一款游戏开发一个所谓的AAC(自动帐户创建者),它基本上是一个具有创建帐户,玩家和其他更多功能的站点。该服务器仅支持SHA1和Plain-
这是完全不安全的。我无法深入研究源代码并进行更改。如果有可以使用SHA1的信息,我将不胜感激。我刚刚阅读了BCrypt,这很棒,但是我不能真正更改源代码以适合BCrypt。我设法将SHA1这样注册:

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

但是我根本无法登录。我做错了吗?好像Laravel不允许我登录。

我有get_registerpost_register,还有我有get_loginpost_login。我需要在post_login中进行更改以使其登录吗?有什么提示吗?

我在WAMP上使用Laravel的php服务器(php
artisan服务)和phpMyAdmin。我认为Laravel会在您通过Auth::attempt方法laravel
检查数据库时进行检查,而laravel在进行某种形式的哈希检查以检查当前pw和已登录的pw以进行相互检查。


问题答案:

您将不得不重写该Hash模块。感谢Laravel遵循IoC和依赖注入概念的想法,这将相对容易。

首先,创建一个app/libraries文件夹并将其添加到作曲家的文件夹中autoload.classmap

"autoload": {
    "classmap": [
        // ...

        "app/libraries"
    ]
},

现在,该创建类了。创建一个SHAHasher类,实现Illuminate\Hashing\HasherInterface。我们需要实现它的3种方法:makecheckneedsRehash

注意: 在Laravel
5上,实现Illuminate/Contracts/Hashing/Hasher而不是Illuminate\Hashing\HasherInterface

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组件

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,删除以下行:

'Illuminate\Hashing\HashServiceProvider',

然后,添加以下内容:

'SHAHashServiceProvider',


 类似资料:
  • 我试图扩展laravel 5中的默认BCrypt,以使用SHA1加密。 使用这个问题的答案:如何在Laravel 4中使用SHA1加密而不是BCrypt?和官方留档http://laravel.com/docs/5.0/extending#container-based-extension,我设法伪造了以下代码: 应用程序内/提供商/服务提供商。php 应用程序内/ShaHasher。php 在a

  • 问题内容: 我想创建一个(用键签名)的哈希 如何使用Node.js Crypto创建该哈希? 问题答案: 加密文档:http : //nodejs.org/api/crypto.html

  • 问题内容: 我需要将SHA1加密的文本反向转换为纯文本。 我需要Java代码。 许多论坛都说无法做到,但是我发现了一个链接http://www.stringfunction.com/sha1-decrypter.html,它的功能完全相同。我已经测试过了 现在我需要用Java实现的算法。 请帮忙!!! 问题答案: 根本不可能。像所有加密摘要算法一样,SHA1不是加密算法,而是哈希算法。只要需要,它

  • 这些散列密码的方法中,哪一种最安全,最难发现散列冲突? 仅MD5 仅SHA1 通过SHA1MD5

  • 问题内容: 目前,我将密码[未加密]保留在属性文件中。使用ant将该密码原样放置在配置xml中。 [配置xml用于数据源,它正在创建dbcp.BasicDataSource的对象] 现在,是否有可能在ant目标之后以加密形式复制密码。听说Jasypt可以做到!直到现在我还没有尝试过。但是,问题不止于此。BasicDataSource不接受加密的密码。是否可以替代BasicDatasource。 仅

  • 问题内容: 我编写的使用3DES在Java中对字符串进行编码的每种方法都无法解密回原始字符串。是否有人有一个简单的代码片段,可以对字符串进行编码,然后再将其解码回原始字符串? 我知道我在此代码中的某个地方犯了一个非常愚蠢的错误。到目前为止,这是我一直在努力的工作: 注意,我不是从crypto方法返回BASE64文本,也不是在解密方法中不是对base64进行未编码的,因为我试图查看我是否在BASE6