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中如何调用用户自定义函数
Aug 06 PHP
php判断正常访问和外部访问的示例
Feb 10 PHP
php表单请求获得数据求和示例
May 15 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
Jun 19 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
php对文件进行hash运算的方法
Apr 03 PHP
php从数据库查询结果生成树形列表的方法
Apr 17 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
wordpress网站转移到本地运行测试的方法
Mar 15 PHP
Laravel中GraphQL接口请求频率实战记录
Sep 01 PHP
PHP 裁剪图片
Mar 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
用PHP动态创建Flash动画
2006/10/09 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
List the UTC Time on a Computer
2007/06/11 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
JS 控件事件小结
2012/10/31 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
js数据类型检测总结
2018/08/05 Javascript
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
利用python实现逐步回归
2020/02/24 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
给老婆道歉的话
2015/01/20 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书
自我推荐信格式模板
2015/03/24 职场文书
无犯罪记录证明样本
2015/06/16 职场文书
返乡农民工证明
2015/06/24 职场文书
2016年小学中秋节活动总结
2016/04/05 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
浅谈如何提高PHP代码的质量
2021/05/28 PHP
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python