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
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
PHP生成短网址的3种方法代码实例
Jul 08 PHP
php命令行用法入门实例教程
Oct 27 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
PHP实现bitmap位图排序与求交集的方法
Jul 28 PHP
Laravel重写用户登录简单示例
Oct 08 PHP
php实现的SSO单点登录系统接入功能示例分析
Oct 12 PHP
PHP中递归的实现实例详解
Nov 14 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删除数组元素示例分享
2014/02/17 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
javascript初学者常用技巧
2014/09/02 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
微信小程序自定义toast实现方法详解【附demo源码下载】
2017/11/28 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
express express-session的使用小结
2018/12/12 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
python基础教程之类class定义使用方法
2014/02/20 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
香港礼品网站:GiftU eshop
2017/09/01 全球购物
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
大四自我鉴定范文
2013/10/06 职场文书
实验教师岗位职责
2014/02/13 职场文书
工作决心书范文
2014/03/11 职场文书
物业保安员岗位职责
2014/03/14 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
校长个人总结
2015/03/03 职场文书
禁毒心得体会范文
2016/01/15 职场文书
2017新年晚会开幕词
2016/03/03 职场文书