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 array_intersect()函数使用代码
Jan 14 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
php制作中间带自己定义图片二维码的方法
Jan 27 PHP
php导出excel格式数据问题
Mar 11 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
Nov 05 PHP
php中实现可以返回多个值的函数实例
Mar 21 PHP
PHP下载远程文件到本地存储的方法
Mar 24 PHP
php项目中百度 UEditor 简单安装调试和调用
Jul 15 PHP
php结合redis高并发下发帖、发微博的实现方法
Dec 15 PHP
php7安装yar扩展的方法详解
Aug 03 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
PHP并发场景的三种解决方案代码实例
Feb 27 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
重料打造自己的“宝马”---第三代
2021/03/02 无线电
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
PHP 超链接 抓取实现代码
2009/06/29 PHP
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
javascript常见用法总结
2014/05/22 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
JS中Attr的用法详解
2017/10/09 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
深入了解JS之作用域和闭包
2020/06/16 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
Python可以用来做什么
2020/11/23 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
师范生求职自荐信
2014/06/14 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python