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动态图像的创建
Oct 09 PHP
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
php设计模式 State (状态模式)
Jun 26 PHP
php _autoload自动加载类与机制分析
Feb 10 PHP
PHP输出数组中重名的元素的几种处理方法
Sep 05 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
ThinkPHP实现将本地文件打包成zip下载
Jun 26 PHP
php保存信息到当前Session的方法
Mar 16 PHP
浅谈php7的重大新特性
Oct 23 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
Apr 15 PHP
php判断电子邮件是否正确方法
Dec 04 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 MYSQL中插入当前时间
2008/04/06 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
2009/10/09 PHP
php 短链接算法收集与分析
2011/12/30 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
JS实现弹性漂浮效果的广告代码
2015/09/02 Javascript
JavaScript中两个字符串的匹配
2016/06/08 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
python进阶教程之词典、字典、dict
2014/08/29 Python
Django发送html邮件的方法
2015/05/26 Python
django之常用命令详解
2016/06/30 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
Python闭包和装饰器用法实例详解
2019/05/22 Python
python随机数分布random均匀分布实例
2019/11/27 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
2020/01/17 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
初婚未育未抱养证明
2014/01/12 职场文书
警校毕业生自我评价
2014/04/06 职场文书
毕业典礼主持词
2015/06/29 职场文书
MySQL 重写查询语句的三种策略
2021/05/10 MySQL
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android