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做下载文件的实现代码及文件名中乱码解决方法
Feb 03 PHP
php数组函数序列之array_search()- 按元素值返回键名
Nov 04 PHP
php addslashes及其他清除空格的方法是不安全的
Jan 25 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
Jun 13 PHP
php实现html标签闭合检测与修复方法
Jul 09 PHP
php使用正则表达式去掉html中的注释方法
Nov 03 PHP
PHP精确计算功能示例
Nov 29 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
php使用curl伪造浏览器访问操作示例
Sep 30 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
Oct 11 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 23 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
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
如何通过Apache在本地配置多个虚拟主机
2020/07/29 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
2016/05/18 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
2019/09/02 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
Python中编写ORM框架的入门指引
2015/04/29 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
如何理解Python中包的引入
2020/05/29 Python
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
小学运动会班级口号
2014/06/09 职场文书
幼儿园标语大全
2014/06/19 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
教师个人教学总结
2015/02/11 职场文书
小王子读书笔记
2015/06/29 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
Python利用capstone实现反汇编
2022/04/06 Python