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 相关文章推荐
swfupload 多文件上传实现代码
Aug 27 PHP
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 PHP
PHP中文分词的简单实现代码分享
Jul 17 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
利用php绘制饼状图的实现代码
Jun 07 PHP
php读取excel文件的简单实例
Aug 26 PHP
php多文件上传实现代码
Feb 20 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
Nov 10 PHP
详解Window7 下开发php扩展
Dec 31 PHP
PHP简单获取多个checkbox值的方法
Jun 13 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
PHP项目多语言配置平台实现过程解析
May 18 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开启openssl的方法
2014/05/15 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
YII框架http缓存操作示例
2019/04/29 PHP
解决Laravel自定义类引入和命名空间的问题
2019/10/15 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
jquery 防止表单重复提交代码
2010/01/21 Javascript
js 三级关联菜单效果实例
2013/08/13 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python编程嵌套函数实例代码
2018/02/11 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
网站编辑求职信
2013/10/17 职场文书
给面试官的感谢信
2014/02/01 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
综治目标管理责任书
2015/05/11 职场文书
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers