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 相关文章推荐
在线增减.htpasswd内的用户
Oct 09 PHP
怎么样可以把 phpinfo()屏蔽掉?
Nov 24 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
php中的观察者模式简单实例
Jan 20 PHP
php封装的连接Mysql类及用法分析
Dec 10 PHP
PHP实现小偷程序实例
Oct 31 PHP
Laravel模型间关系设置分表的方法示例
Apr 21 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 PHP
PHP 数组操作详解【遍历、指针、函数等】
May 13 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 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
日本十大惊悚动漫
2020/03/04 日漫
php中文字符截取防乱码
2008/03/28 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
js兼容火狐获取图片宽和高的方法
2015/05/21 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
2017/02/04 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
Python中pillow知识点学习
2018/04/30 Python
linux安装python修改默认python版本方法
2019/03/31 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
优纳科技软件测试面试题
2012/05/15 面试题
医学生自荐信
2013/12/03 职场文书
体检通知范文
2015/04/21 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
Python 键盘事件详解
2021/11/11 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python