Laravel的加密解密与哈希实例讲解


Posted in PHP onMarch 24, 2021

一、加密解密

当你的应用程序中需要用到加密和解密的地方时可以使用Laravel自带的加密解密工具。

Laravel 的加密机制使用的是 OpenSSL 所提供的 AES-256 和 AES-128 加密。强烈建议你使用 Laravel 内建的加密工具,而不是用其它的加密算法。所有 Laravel 加密之后的结果都会使用消息认证码 (MAC) 签名,使其底层值不能在加密后再次修改。

相应的配置文件 config/app.php

首先生成 APP_KEY

php artisan key:generate

在.env文件里面

APP_KEY=base64:NHs1dJd5AkOZJvnPJEHMVmg89hi7Lr8Uc5zkOXEgMgk=

最终调用的地方在:

Illuminate\Encryption\Encrypter.php
 
public function decrypt($payload, $unserialize = true)
public function decrypt($payload, $unserialize = true)

可以看出,默认是支持序列化和反序列化的,也就是说支持对数组和对象进行加密解密。

再来看我们可以调用的方法:
助手函数:helpers.php

function encrypt($value, $serialize = true)
{
  return app('encrypter')->encrypt($value, $serialize);
}
function decrypt($value, $unserialize = true)
{
  return app('encrypter')->decrypt($value, $unserialize);
}

门面操作:Illuminate\Support\Facades\Crypt

public function encryptString($value)
{
  return $this->encrypt($value, false);
}
public function decryptString($payload)
{
  return $this->decrypt($payload, false);
}

可以看出门面是只能对字符串进行加密解密的,而助手函数功能更强大一些。

示例:

$pass = "123456";
$this->info($pass);
 
$this->info("");
 
$enc = Crypt::encryptString($pass);
$this->info($enc);
 
$dec = Crypt::decryptString($enc);
$this->info($dec);
 
$this->info("");
 
$enc = encrypt($pass);
$this->info($enc);
$dec = decrypt($enc);
$this->info($dec);

二、哈希加密

哈希加密应用在不需要解密的地方,比如存储密码,校验密码。
Bcrypt 是哈希密码的理想选择,因为它的 「加密系数」 可以任意调整,这意味着生成哈希所需的时间可以随着硬件功率的增加而增加。
配置:config/hashing.php
使用门面:Illuminate\Support\Facades\Hash
加密:

$pass = "123456";
$enc = Hash::make($pass);
// $2y$10$4A6vnjdJwIo.FjnvcPN4OepeFgiJ4K1VDCXRSGUbjue3k23AID3Pq
// $2y$10$JhFPyb7nEN6A9.P5ZHXYpea07E727LNbxhMj8UrsuoE0M1PKUYY9i

同一个字符串每次加密的结果不一样!!

校验:

if (Hash::check($pass, $enc)) {
  $this->info("ok");
}else{
  $this->info('err');
}

即使每次加密的结果不一样,但是不影响校验。

PHP 相关文章推荐
php简单静态页生成过程
Mar 27 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 PHP
PHP的范围解析操作符(::)的含义分析说明
Jul 03 PHP
PHP生成数组再传给js的方法
Aug 07 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
PHP实现中文圆形印章特效
Jun 19 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
详解WordPress开发中get_header()获取头部函数的用法
Jan 08 PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 PHP
yii2 resetful 授权验证详解
May 18 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
laravel使用redis队列实例讲解
phpquery中文手册
Mar 18 #PHP
thinkphp5 路由分发原理
Mar 18 #PHP
is_file和file_exists效率比较
Mar 14 #PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
open_basedir restriction in effect. 原因与解决方法
Mar 14 #PHP
aec加密 php_php aes加密解密类(兼容php5、php7)
Mar 14 #PHP
You might like
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
2016/08/24 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
js实现开关灯效果
2020/03/30 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
[04:32]DOTA2著名解说配音敌法师 现场专访海涛怒切假腿
2013/12/20 DOTA
python二叉树遍历的实现方法
2013/11/21 Python
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
pandas实现导出数据的四种方式
2020/12/13 Python
视图的作用
2014/12/19 面试题
新颖的化妆品活动方案
2014/08/21 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
兵马俑导游词
2015/02/02 职场文书
红色故事汇观后感
2015/06/18 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
《落花生》教学反思
2016/02/16 职场文书