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安全配置方法
Jun 16 PHP
深入PHP中的HashTable结构详解
Jun 13 PHP
php cli换行示例
Apr 22 PHP
PHP防止post重复提交数据的简单例子
Jun 07 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 PHP
PHP实现数据库的增删查改功能及完整代码
Apr 18 PHP
PHP抽象类与接口的区别详解
Mar 21 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
模拟flock实现文件锁定
2007/02/14 PHP
PHP中include()与require()的区别说明
2010/03/10 PHP
简单的移动设备检测PHP脚本代码
2011/02/19 PHP
PHP 基于文件头的文件类型验证类函数
2012/05/01 PHP
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
页面中js执行顺序
2009/11/09 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
JS原型链怎么理解
2016/06/27 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
实现高性能javascript的注意事项
2019/05/27 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
Vuex的API文档说明详解
2020/02/05 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
Python编写简单的HTML页面合并脚本
2016/07/11 Python
Keras自定义IOU方式
2020/06/10 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
档案接收函范文
2014/01/10 职场文书
师德学习感言
2014/01/31 职场文书
工作决心书
2014/03/11 职场文书
《音乐之都维也纳》教学反思
2014/04/16 职场文书
企业金融服务方案
2014/06/03 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书