PHP通过pem文件校验签名异常

news2024/9/23 23:30:08

问题描述:
在对接第三方支付过程中,支付成功异步回调时,校验签名,一直无法通过。
但是在支付成功时有一个同步返回也需要校验签名,用的是同样的校验方法,都没有问题。
当把回调时传递的参数放在postman中,手动发起回调,也可以通过签名校验

最后经过排查,是引用秘钥文件时,报错了,错误代码如下

public static function verify(array $data, $sign)
    {
        if (empty($data) || empty($sign)) {
            return "";
        }

        //code+msg+date+result,

        $code   = $data['code'] ?? '';
        $msg    = $data['msg'] ?? '';
        $date   = $data['date'] ?? '';
        $result = $data['result'] ?? '';

        $signString = $code . $msg . $date . $result;
		$mallbook_key_file = __DIR__.'rsa_public.pem';
		
        $pubKey = file_get_contents($mallbook_key_file);
        /** 此处可能会返回false **/
        $res = openssl_get_publickey($pubKey);
        
        $result =  openssl_verify($signString , base64_decode($sign), $res) === 1;
        openssl_free_key($res);

        return $result; 
    }

上面代码其实是没有问题的,问题出在rsa_public.pem文件的内容,秘钥内容都写在同一行了,没有按照标准的秘钥格式书写,如下
在这里插入图片描述

解决方法

第一种

按标准的秘钥书写格式修改秘钥文件每行只能有64个字符,如下
在这里插入图片描述

第二种

直接在代码中拼接秘钥字符串

$pubKey ='MIGfMA0GCSqGSIb3DQE***************************************
********************************************************************
***************1mwyu7RTDC8Wp7LGddnlkJsmL8masgMxA6cc9NwIDAQAB';
	
    $str= chunk_split($pubKey, 64, "\n");
    $key = "-----BEGIN PUBLIC KEY-----\n$str-----END PUBLIC KEY-----\n";

    $signature = base64_decode($sign);
    return openssl_verify($signString, $signature, $key, OPENSSL_ALGO_SHA1) === 1;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows自带的远程桌面连接教程

文章目录 1.鼠标右键“我的电脑”-“属性”2.在左侧找到“远程设置”-在远程桌面设置处勾选“允许远连接到此计算机”3.关闭防火墙,根据使用的网络选择关闭对应的防火墙4.远程连接按WINR,输入mstsc,回车进入到远程桌面连接页面 1.鼠标右键“我的电脑”-“…

2023/9/15 -- C++/QT

作业: 1> 将工程文件进行注释 2> 03login_box.pro: QT core gui #core核心库 gui图形开发库greaterThan(QT_MAJOR_VERSION, 4): QT widgets #4.0版本以上自动包含widgets库CONFIG c11 #支持C11版本# The following define makes your compiler em…

Elasticsearch 8.10 中引入查询规则 - query rules

作者:Kathleen DeRusso 我们很高兴宣布 Elasticsearch 8.10 中的查询规则! 查询规则(query rules)允许你根据正在搜索的查询词或根据作为搜索查询的一部分提供的上下文信息来更改查询。 什么是查询规则? 查询规则&…

Linux MyFile

在之前,我们应该都多少接触过了C语言的文件管理,fopen,fclose,fputs....等函数的用法,也分析了系统层面上C语言是如何实现文件管理的。 回顾 上一个文章,我们讲解了十分重要的知识,在文件被打…

组合拳SSRF+redis未授权访问

目录 一、SSRF 二、redis未授权访问 三、组合利用 1.写入Webshell 2.反弹shell 一、SSRF 一台web服务器对其他服务器发起请求,以加载其他服务器的web内容或数据 但因请求参数没有进行严格过滤,攻击者可能会通过SSRF漏洞来访问敏感数据、执行未经授…

Deformable Convolution 可变形卷积

论文:https://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Networks_ICCV_2017_paper.pdf 代码:https://github.com/4uiiurz1/pytorch-deform-conv-v2/blob/master/deform_conv_v2.py 参考博文:可变形卷…

【哈希加密算法】MD5和SHA-1基本介绍和使用!

一、哈希算法 哈希算法,根据碰撞概率,输出的长度越长,就越难产生碰撞,也就越安全。 常用的哈希算法如下: (1)哈希算法的用途 数据加密:哈希算法可以将原始数据转换成不可逆的加密字…

第二章:25+ Python 数据操作教程(第二十一节PIP连接错误:SSL 证书验证失败解决办法)

在公司网络中安装 python 包时最常见的问题是 SSL 证书验证失败。有时公司会屏蔽网络中的某些网站,因此员工无法访问这些网站。每当他们尝试访问这些网站时,都会显示“由于公司政策,访问被拒绝”。它会导致到达主要 python 网站时出现连接错误…

(面试经典刷题)挑战一周刷完150道-Python版本-第3天(40个题)-I(前10个题)

一、长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 可以是暴…

数据结构与算法(C语言版)P1---算法效率

算法的效率:算法的时间复杂度和空间复杂度 【本节目标】 1.算法效率2.时间复杂度3.空间复杂度4.常见时间复杂度以及复杂oj练习 1、算法效率 1.1、如何衡量一个算法是的好坏 如何衡量一个算法的好坏呢?比如斐波那契数列: long long Fib(…

面试官:我们深入聊聊Java虚拟机吧

哈喽!大家好,我是奇哥,一位专门给面试官添堵的职业面试员 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟! 文章目录 前言面试Java虚拟机内存模型垃圾收集器…

2023年CRM系统成功落地的5个标准

企业做CRM选型时都在思考投入产出比,花费上万元、甚至几十万元和几个月的时间购买和实施CRM,能否为公司带来降本增效的变革?CRM上线后,需要多长时间才能真切地看到效果?评估CRM的使用效果,需要每个企业制定…

【C++STL基础入门】queue基础使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、队列是什么二、queue的基础使用2.1 queue的构造函数2.2 queue的属性函数 总结 前言 C标准模板库(STL)提供了一系列强大的容器和算法…

vi/vim编辑器

vi和vim区别 vi 和 vim 是常见的文本编辑器,以下是它们之间的区别: 功能和特性: vi 是最早的版本,是在早期Unix系统中广泛使用的编辑器。vi 相对较简单,功能主要集中在基本的文本编辑操作上,如插入、删除、…

MyBatis: 配置文件解析流程

XmlConfigurationBuilder类来解析配置文件。 调用了build方法,其代码如下: 其中通过parse方法返回一个Configuration对象,在传递给build方法。 parse方法代码如下: 其中调用了parseConfiguration方法, 可以看到其中…

hive 静态分区与动态分区(笔记)

目录 前言: 静态分区: 1.创建分区 2.删除分区 3.在分区中插入数据 4.查看分区表数据 动态分区 : 2.查看v表源数据 3.以emp_name为动态字段数据抽取到employee表 总结 前言: Hive中的分区就是把一张大表的数据按照业务需要…

华为云云耀云服务器L实例评测|华为云上安装监控服务Prometheus三件套安装

文章目录 华为云云耀云服务器L实例评测|华为云上试用监控服务Prometheus一、监控服务Prometheus三件套介绍二、华为云主机准备三、Prometheus安装四、Grafana安装五、alertmanager安装六、三个服务的启停管理1. Prometheus、Alertmanager 和 Grafana 启动顺序2. 使用…

ChatGPT与日本首相交流核废水事件-精准Prompt...

了解更多请点击:ChatGPT与日本首相交流核废水事件-精准Prompt...https://mp.weixin.qq.com/s?__bizMzg2NDY3NjY5NA&mid2247490070&idx1&snebdc608acd419bb3e71ca46acee04890&chksmce64e42ff9136d39743d16059e2c9509cc799a7b15e8f4d4f71caa25968554…

UG时的弹出框:提示没有可用许可证,No such feature exists(-5),

当过多用户使用UG时或UG优化失效时会出现此弹出框。如果该问题发生时,需立即联系管理员,查看许可管理平台,该服务器许可是否占满,如果占满,联系武汉格发管理员,请准备好服务器远程,可以及时查看…

NLP(5)--自编码器

目录 一、自编码器 1、自编码器概述 2、降噪自编码器 二、特征分离 三、自编码器的其他应用 1、文本生成 2、图像压缩 3、异常检测 四、VAE 1、极大似然估计 2、GSM 3、GMM 4、VAE的引出 5、VAE 一、自编码器 1、自编码器概述 自编码器(Auto-Encode…