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 相关文章推荐
Extended CHM PHP 语法手册之 DIY
Oct 09 PHP
一段php加密解密的代码
Oct 09 PHP
随机广告显示(PHP函数)
Oct 09 PHP
深入理解PHP原理之异常机制
Aug 21 PHP
通过PHP修改Linux或Unix口令的方法分享
Jan 30 PHP
一个好用的PHP验证码类实例分享
Dec 27 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
Mar 19 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
php实现每日签到功能
Nov 29 PHP
Laravel框架Auth用户认证操作实例分析
Sep 29 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 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也可以?成Shell Script
2006/10/09 PHP
Cannot modify header information错误解决方法
2008/10/08 PHP
PHP实现异步调用方法研究与分享
2011/10/27 PHP
更改localhost为其他名字的方法
2014/02/10 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
splice slice区别
2006/10/09 Javascript
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
分享Python切分字符串的一个不错方法
2018/12/14 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
2019/05/06 Python
Python中Numpy mat的使用详解
2019/05/24 Python
Python 进程之间共享数据(全局变量)的方法
2019/07/16 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
Spy++的使用方法及下载教程
2021/01/29 Python
文案策划求职信
2014/03/18 职场文书
银行委托书范本
2014/04/04 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
MySQL新手入门进阶语句汇总
2022/09/23 MySQL