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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
人大复印资料处理程序_补充篇
Oct 09 PHP
实现dedecms全站URL静态化改造的代码
Mar 29 PHP
在命令行下运行PHP脚本[带参数]的方法
Jan 22 PHP
php代码收集表单内容并写入文件的代码
Jan 29 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
php实现的短网址算法分享
Jun 20 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
Mar 10 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
php实现分页功能的详细实例方法
Sep 29 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
Feb 11 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
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
jquery 学习笔记一
2010/04/07 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
概述BootStrap中role="form"及role作用角色
2016/12/08 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
Nuxt.js 数据双向绑定的实现
2019/02/17 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
英国网上花店:Bunches
2016/11/29 全球购物
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
会计实习生工作总结的自我评价
2013/10/07 职场文书
消防先进事迹材料
2014/02/10 职场文书
C++程序员求职信
2014/05/07 职场文书
规范化管理年活动总结
2014/08/29 职场文书
中学生自我评价2015
2015/03/03 职场文书