添加自定义的密码加密方式 - prinsss/blessing-skin-server GitHub Wiki

Blessing Skin 默认提供了 PHP_PASSWORD_HASH(SALTED2)MD5(SALTED2)SHA256(SALTED2)SHA512CrazyCrypt1 这几种加密方式,对于一般用户来说已经够了。

但是,如果你想要和某些程序进行用户数据对接的话,你可能需要添加一个自定义的密码加密方式。

注意,自定义密码加密方式需要你有一定的 PHP 编程基础。

以下是具体步骤:


进入皮肤站根目录下的 app/Services/Cipher,可以看到所有可用的密码加密方式的代码都在这里,并且你在 .env 里填写的值就是这些代码的 文件名 & 类名

➜  Cipher git:(master) $ tree
.
├── BaseCipher.php
├── CrazyCrypt1.php
├── EncryptInterface.php
├── MD5.php
├── PHP_PASSWORD_HASH.php
├── SALTED2MD5.php
├── SALTED2SHA256.php
├── SALTED2SHA512.php
├── SHA256.php
└── SHA512.php

0 directories, 10 files

现在我们新建一个文件 ExampleCipher.php,内容如下:

<?php

namespace App\Services\Cipher;

// 注意,类名与文件名必须一致
// 否则 Blessing Skin 无法识别
class ExampleCipher extends BaseCipher
{
    /**
     * 根据密码明文生成其摘要并返回,用于登录验证或存储。
     *
     * @param  string $value 用户密码的明文
     * @param  string $salt  盐,由 .env 中的 SALT 字段指定
     * @return string
     */
    public function hash($value, $salt = "")
    {
        // 这里放你自己的代码,这里仅作为示例
        // 总之根据明文生成对应的密文就好了
        // 不过一定要记得把密文 return 回去哦
        // 警告:你不应该明文存储用户密码!
        return sha1(md5($value + $salt) + $salt);
    }
}

自定义的密码加密代码就放在这里,具体需求上面的注释里都写清楚了。

然后去 .envPWD_METHOD 字段改成 ExampleCipher(也就是上面的类名,必须大小写一致),你的自定义加密方式就生效了。


注意,切换密码加密方式之后,之前注册的所有用户都将无法登录!

你必须进行「重置密码」操作或者手动修改 users 数据表中的 password 字段。