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技术开发技巧分享
Mar 23 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
May 19 PHP
php去除数组中重复数据
Nov 18 PHP
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
PHP生成树的方法
Jul 28 PHP
4种PHP异步执行的常用方式
Dec 24 PHP
PHP的PDO操作简单示例
Mar 30 PHP
thinkPHP5.0框架引入Traits功能实例分析
Mar 18 PHP
创建无限极分类树型结构的简单方法
Jun 20 PHP
PHP微信网页授权的配置文件操作分析
May 29 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 mssql 数据库分页SQL语句
2008/12/16 PHP
PHP XML备份Mysql数据库
2009/05/27 PHP
优化php效率,提高php性能的一些方法
2011/03/24 PHP
PHP中Date()时间日期函数的使用方法小结
2011/04/20 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
javascript实现动态标签云
2015/10/16 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
vue mounted组件的使用
2018/06/18 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
详解Python中列表和元祖的使用方法
2015/04/25 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
python3 mmh3安装及使用方法
2019/10/09 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
2020/05/11 Python
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
2015年中学校长工作总结
2015/05/19 职场文书
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏