如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
加密
使用 Laravel 的加密器之前,必须在配置文件 config/app.php
中设置 key
选项为 32 位随机字符串。可以使用 php artisan key:generate
命令来生成这个key,该 Artisan 命令会使用PHP的安全随机字节生成器来构建 key 的值。
encrypt加密
'secret' => encrypt($request->secret)
不进行序列化的加密
加密值在加密期间都会经过serialize
,从而允许对对象和数组的加密,因此,非 PHP 客户端接收的加密数据需要进行unserialize
。如果你想要在加密和解密数据时不进行序列化,可以使用 Crypt
门面提供的 encryptString
和 decryptString
方法:
use Illuminate\Support\Facades\Crypt; $encrypted = Crypt::encryptString('Hello world.'); $decrypted = Crypt::decryptString($encrypted);
解密
decrypt
使用辅助函数 decrypt
对加密数据进行解密。如果该值不能被解密,例如MAC无效,将会抛出一个Illuminate\Contracts\Encryption\DecryptException
异常:
use Illuminate\Contracts\Encryption\DecryptException; try { $decrypted = decrypt($encryptedValue); } catch (DecryptException $e) { // }
哈希
使用hash门面上的make方法对储存密码进行哈希
use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; ... public function update(Request $request) { // 验证新密码长度... $request->user()->fill([ 'password' => Hash::make($request->newPassword) ])->save(); }
通过哈希验证
if (Hash::check('plain-text', $hashedPassword)) { // 密码匹配... }
检查密码是否需要被重新哈希
needsRehash
方法允许你判断哈希计算器使用的工作因子在上次密码被哈希后是否发生改变:
if (Hash::needsRehash($hashed)) { $hashed = Hash::make('plain-text'); }