位置: 编程技术 - 正文

Laravel中encrypt和decrypt的实现方法(laravel dump)

发布时间:2024-01-06

推荐整理分享Laravel中encrypt和decrypt的实现方法(laravel dump),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:laravel .env,laravel dump,laravel使用,laravel enum,laravel appends,laravel enum,laravel .env,laravel .env,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

Laravel 的加密机制使用 OpenSSL 提供 AES- 和 AES- 的加密,本文将详细介绍关于Laravel中encrypt和decrypt的实现,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

1. 使用方法

首先是生成秘钥。要需要在.env目录里提供APP_KEY,这个如果没有的话,可以通过命令php artisan key:generate生成,也可以自己设置。生成后例子应该是这样的

在文件配置加密key和加密算法,在config/app.php的目录里有配置

使用方法,在laravel里已经有使用方法了,这里就不在过多的说了。主要使用的两个方法,一个是encrypt的加密,一个是decrypt的解密

2. 查找加密解密的文件

实现方法的位置是在vendor/illuminate/encryption/的目录下发现两个文件,一个是EncryptionServiceProvider另外一个是Encrypter

3. 分析EncryptionServiceProvider文件

这个文件没太多东西,但是通过这个我们可以看出,其实在配置文件的,我们能直接写key,并且前面不带base也是可以解析。相当于省几步操作

另外,在实例化类的时候,需要传入key以及加密方式

4. 分析Encrypter文件

1. 分析__construct,在实例化之前执行

上面的方法,主要是用来判断加密方式和传的key的长度是否相同,因为不同的加密方式,要求的相应的key的长度也是有要求的,具体每种加密方式要求key的长度可以查找对应的文档

上面这个方法展现了一个严谨的地方,用了mb_strlen方法,并且要求计算长度是按照8bit位来计算的。这样的好处是,不管是在哪种操作系统,计算的长度都是一样的。

通过这个考虑到不同操作系统的情况,不会出现加密出现问题的情况。

2. 分析encrypt方法

Laravel中encrypt和decrypt的实现方法(laravel dump)

上面用到了一个自定义的方法hash(),我们可以看下方法的实现。

以上加密共分了三大步

1、生成随机码

2、生成加密内容

3、生成签名

框架用到一个优雅的方法,使用serialize生成一个值,这个方法高雅在哪里,就是不管你得内容是数组还是字符串,都能转换成字符串。 而使用serialize和使用json_encode的区别在哪,我想最大的好处是,你所要加密的内容比较大的时候,serialize相对于要快。

另外一个地方是,框架在加密的时候使用了一个随机字符串。为什么要使用随机字符串呢,因为使用了随机字符串,使每次加密的内容都是不一样的,防止别人猜出来。

3. 分析decrypt方法

解密数据,可以说是最复杂的一块,不仅要进行数据的解密,而且还要保证数据的完整性,以及数据防篡改

getJsonPayload方法

validPayload方法就不说了,比较简单和基本,重点就说说validMac验证这块,保证数据不被篡改,这是最重要的

calculateMac方法是为了根据原始数据和随机值生成一个签名,然后用这签名再次生成一个签名

以上解密共分了三大步

1、判断数据的完整性

2、判断数据的一致性

3、解密数据内容。

这个验证签名有个奇怪的地方,他并不像我们平常验证签名一样。我们平常验证签名都是,拿原始数据和随机值生成一个签名,然后拿生成的签名和原始数据的签名进行比对来判断是否有被篡改。

而框架却多了一个,他用的是,通过原始数据和随机值生成签名后,又拿这个签名生成了一个签名,而要比对的也是拿原始数据里的签名在生成一个签名,然后进行比对。目前想不出,为什么要多几步操作。

在加密的时候,我们把原始数据使用serialize转换了一下,所以我们相应的也需要使用unserialize把数据转换回来。

注意

加密时使用的openssl_encrypt里的随机项量值是使用的原始数据raw这种二进制的值,使用openssl_decrypt解密后的值是使用的经过base位后的随机字符串。 解密的时候生成签名比较的时候,不是用原来的签名,然后根据原始数据的内容,重新生成一次签名进行比较,而是使用原始签名为基础生成一个签名,然后在拿原始数据为基础生成的签名,在用这个新生成的签名重新生成了一次签名。然后进行比较的。 AES是加密数据,后面能够逆向在进行解密出数据。而SHA是生成签名的,这个过程是不可逆的,是为了验证数据的完整性。

总结

标签: laravel dump

本文链接地址:https://www.jiuchutong.com/biancheng/288250.html 转载请保留说明!

上一篇:php安装扩展mysqli的实现步骤及报错解决办法(php-mysql安装)

下一篇:基于ThinkPHP5.0实现图片上传插件(thinkphp技术)

  • 企业如何帮员工交公积金
  • 本月发生费用未支付会计处理
  • 购车增值税可以抵扣多少
  • 个体工商户免征税额度是多少
  • 发票开做红冲的会计分录怎么做
  • 工会基金是扣个人还是扣企业的
  • 资产负债表里是科目还是项目
  • 小规模纳税人购车好处
  • 固定资产附加的账务处理
  • 办公场所转租赁需要交哪些税费
  • 发票抬头是个人,能在单位报销吗
  • 当月没有认证的发票要勾选吗
  • 设备服务费是什么
  • 租赁业务增值税纳税义务发生时间
  • 外贸企业代理出口销售业务发生的费用
  • 建筑工程企业人力资源管理
  • 收到投资款现金流量项目是什么
  • 分公司开票信息
  • 增值税申报表中期初未缴税额指什么
  • 国内废钢贸易需要资质吗
  • 以无形资产进行投资
  • 绝地求生未来之役手游下载
  • 电脑自我诊断
  • typecho 插件开发
  • 赠送客户的商品计入什么科目
  • 代垫运费会计分录怎么写
  • 工程决算审计费收费标准
  • 公司主营业务有哪些类型
  • 银行贷款每个月都要还吗?
  • vue3的unplugin-auto-import自动引入
  • spring获取bean的完全限定类名
  • php实现定时器
  • 保险代理人展业成本如何计算
  • 坏账的确认条件税务会查吗
  • 增值税纳税申报实训报告
  • 解决掉发的有效方法
  • 所得税做账是否需要发票
  • mysql的环境配置
  • 保险理赔进项税额转出
  • 参加会计专业技术资格考试的人员,应具备那些条件
  • 小规模减免的增值税要交所得税吗
  • 支付与其他经营活动的现金为负数
  • 暂估入账应该如何操作
  • 建筑劳务公司的会计账务处理
  • 跨境电商怎么交流
  • 临时工工资会计凭证
  • 劳务派遣公司主营业务成本是什么
  • 二手设备进口报关流程
  • 可供出售金融资产是指什么
  • 低值易耗品和物资的关系
  • 其他应收款属于什么会计要素
  • 预期信用损失率变更属于会计估计变更吗
  • 材料采购成本包括买价和采购费用
  • 购买的办公用品需要入库出库吗
  • 什么是来料加工和进料加工
  • Mysql主从同步Last_IO_Errno:1236错误解决方法
  • win10 mysql 5.6.35 winx64免安装版配置教程
  • win7系统如何打开
  • Office 2007在Windows Vista中出现的反常字体问题的解决办法
  • linux配置ftp服务
  • linux禁止ping的命令
  • xp系统怎么打开开机启动项
  • linux shell命令大全
  • rdclient怎么用win10怎么设置
  • 外国电影怎么看双语的
  • win7 windows安全中心
  • win10安装完后有多大
  • android基础入门
  • perl获取文件名
  • unity怎么做触屏按键
  • 红宝书csv
  • python选择器
  • 魔兽世界全部开发成本
  • 方块大作战百科
  • 山西省地方税务局 先进 文明 李家庄税务所
  • 广东国税局局长是谁
  • 居住证在粤省事怎么查询
  • 业务招待费进项可以抵扣吗为什么
  • 代理记账公司成本怎样结转的
  • 城镇土地使用税优惠政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号