PHP中如何实现PKCS7Signature签名及验签?

php中如何实现pkcs7signature签名及验签?

pkcs7signature php实现解读

在对接第三方接口时,需要用到pkcs7signature加签验证,那么如何在php中实现这个功能呢?

php中可以使用openssl_pkcs7_verify函数进行验签,最后一个参数需要设置成832。另外,需要对请求数据进行升序排序(asort($argarr, sort_string)),才能保证加签后的值和java端一致。

具体实现代码如下:

立即学习“PHP免费学习笔记(深入)”;

    /**     * 加签     * @param string $str 字符串(sortSign($argArr))     * @param string $pre 生成文件干扰字符串UID     * @return string     */    public static function pkcs7Sign($str, $pre = 'tmp')    {        $pre    = uniqid($pre);        $pkcs12 = file_get_contents('PTNRtest.pfx');        openssl_pkcs12_read($pkcs12, $certs, 'mima');        $dataFile = RUNTIME_PATH . $pre . 'dataTxt.txt';        $myfile = fopen($dataFile, "w") or die("Unable to open file!");//将要签名的参数写入文件中        fwrite($myfile, $str);        fclose($myfile);        $signFile = RUNTIME_PATH . $pre . 'sign.txt';        openssl_pkcs7_sign($dataFile, $signFile, $certs['cert'], $certs['pkey'], null, PKCS7_DETACHED | 0x200 | 0x100);        $sign = self::smimeToSign(file_get_contents($signFile));        unlink($dataFile);        unlink($signFile);        return $sign;    }    /**     * 把S/MIME格式数据格式成签名数据     * @param string $smime S/MIME格式数据     * @return string     */    public static function smimeToSign($smime)    {        $prefix  = "||";        $smime   = str_replace("n", $prefix, trim($smime));        $tmpData = [];        preg_match_all("/|{4}(.*)|{4}/Ui", trim($smime), $tmpData);        if (isset($tmpData[1][1])) {            $smime = str_replace("||", "", $tmpData[1][1]);        } else {            $smime = "";        }        return $smime;    }    /**     * 加签数据值升序     * @param array $argArr 请求数据     * @return string     */    public static function sortSign($argArr)    {        $tmp = [];        foreach ($argArr as $key => $val) {            if (in_array($key, ['SIGN_INFO'])) continue;            $tmp[] = $val;        }        asort($tmp, SORT_STRING);        return implode('', $tmp);    }

以上就是PHP中如何实现PKCS7Signature签名及验签?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1250762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
原生PDO多条语句插入失败,问题出在哪里?
上一篇 2025年12月9日 22:33:05
Composer项目中如何排除开发依赖项以优化生产环境?
下一篇 2025年12月9日 22:33:14

相关推荐

  • 安装VC++2015提示0x80070666错误怎么办?全面修复方案来了

    安装VC++2015提示0x80070666错误怎么办?全面修复方案来了安装VC++2015提示0x80070666错误怎么办?全面修复方案来了安装VC++2015提示0x80070666错误怎么办?全面修复方案来了安装VC++2015提示0x80070666错误怎么办?全面修复方案来了

    在运行某些游戏、设计类软件或开发#%#$#%@%@%$#%$#%#%#$%@_20dc++e2c6fa909a5cd62526615fe2788a时,你可能经常会碰到一个令人头疼的问题:安装 microsoft visual c++ 2015 运行库时弹出错误代码 0x80070666,导致安装中断…

    2026年8月30日 用户投稿
    200
  • 金士顿NV3PCIe 4.0 NVMe固态硬盘推出全新规格

    2025年7月8日北京消息,知名存储品牌金士顿今日宣布,在原有2280规格基础上,正式发布全新的NV3PCIe 4.0 NVMe M.2 2230固态硬盘。该产品适用于笔记本、超薄本、迷你PC(NUC)以及掌机等多种设备类型,为那些需要高速度、低功耗,并且对主机内部空间要求较高的用户提供了一个新的升…

    2026年8月30日
    100
  • 小米汽车上周新增订单突破1.1万份 月底新车上市!

    小米汽车强势增长,一周新增订单超万辆!近日,车fans创始人孙少军透露,小米汽车在2月17日至23日期间新增订单超过1.1万辆,与前一周数据基本持平。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 数据显示,在许多车企面临销售淡季的背景下,…

    2026年8月30日
    000
  • 小红书如何优化商品购买链接 小红书电商功能的使用技巧

    优化小红书商品购买链接的核心是打造从内容到交易的无缝信任旅程,需以优质内容为基础,将链接自然融入笔记、评论或直播中,避免生硬插入;2. 优先使用“薯店”实现平台内闭环交易,提升加载速度与用户信任,降低跳转流失;3. 利用“合集”功能整合主题内容,形成系统化购物指南,提升连带销售与用户停留时长;4. …

    2026年8月30日
    000
  • 如何为iPhoneSE2022获取固件?快速下载操作教程

    首先使用iTunes或Finder通过按住Shift(Windows)或Option(macOS)键点击“检查更新”来自动下载iPhone SE(2022年款)的官方固件;其次可借助爱思助手或3uTools等可信第三方工具选择并下载指定iOS版本固件;最后还可访问ipsw.me等可靠网站手动下载IP…

    2026年8月30日
    000
  • ThinkPHP6路由解析详解:深入了解路由原理

    ThinkPHP6路由解析详解:深入了解路由原理 引言:在Web应用开发中,路由是一个非常重要的概念。它负责解析用户的请求并将其分发到相应的控制器和动作中。在ThinkPHP6框架中,路由系统被设计得非常灵活和强大,本文将深入探讨ThinkPHP6路由解析的原理和用法,并通过代码示例进行说明。 一、…

    2026年8月30日
    000
  • win10怎么截图_win10截图的快捷键与多种方法

    使用PrintScreen键可将全屏截图复制到剪贴板,再粘贴至画图等应用保存;2. 按Win+PrintScreen可自动将全屏截图以PNG格式保存至“图片/屏幕截图”文件夹;3. Alt+PrintScreen用于截取当前活动窗口并复制到剪贴板;4. Win+Shift+S调出系统截图工具栏,支持…

    2026年8月30日
    100
  • 如何解决PHP配置管理复杂性问题?helhum/config-loader助你轻松搞定!

    可以通过一下地址学习composer:学习地址 在开发过程中,管理配置文件常常是一项复杂且容易出错的工作。特别是当项目涉及多个环境和上下文时,如何高效地合并和管理这些配置成为一个挑战。最近我在处理一个多环境的项目时,遇到了配置管理的难题,尝试了多种方法后,最终通过 helhum/config-loa…

    用户投稿 2026年8月30日
    100
  • Vmware里部署CentOs7共享目录

    本篇文章的主要内容是和大家讲述如何在vmware里部署centos7共享目录,具有一定的学习价值,感兴趣的朋友可以了解一下。 首先下载VMware和CentOs7的镜像 安装VMware我是参考的https://www.cnblogs.com/wuyx/p/7246675.html,已经非常详细了 …

    用户投稿 2026年8月30日
    000
  • 悟空浏览器能看电视剧吗怎么看

    悟空浏览器确实可以免费看电视剧,无需额外开通会员,其内置聚合视频功能整合了多个平台资源,涵盖热播剧、经典剧、电影、综艺等,用户只需打开app点击“视频”或“影视”入口,或直接搜索剧名如“庆余年第二部”,即可选择播放源观看,操作简单适合各类用户,更新速度紧跟官方节奏,但播放时可能有广告,部分高清资源需…

    2026年8月30日
    000
  • 微信小程序离线表单提交:如何实现即使在无网络状态下也能提交表单?

    微信小程序离线表单:无网络也能提交 许多开发者都希望微信小程序具备离线功能,尤其在需要用户持续填写信息的场景,例如表单提交。本文将详细介绍如何在网络状况不佳或离线情况下,实现微信小程序表单的填写和提交。 核心问题在于:小程序能否在离线状态下工作并保存用户数据?答案是肯定的。本文将提供一个完整示例,包…

    2026年8月30日
    000
  • iPhone11pro max还原网络设置的具体方法

    iPhone11pro max还原网络设置的具体方法iPhone11pro max还原网络设置的具体方法iPhone11pro max还原网络设置的具体方法iPhone11pro max还原网络设置的具体方法

    php小编草莓为你分享iphone11pro+max还原网络设置的具体方法。iphone11pro+max拥有强大的性能和完美的用户体验,但有时也会出现网络问题。在这种情况下,还原网络设置有助于解决问题和提高网络连接速度。还原网络设置不会删除任何数据,但会清除所有网络设置和密码。本文将详细介绍还原网…

    2026年8月30日 用户投稿
    000
  • u盘重装系统后桌面文件如何恢复,重装系统后的u盘怎么恢复

    一、准备工作 在开始恢复桌面文件前,请准备好以下工具: 1. U盘:用于存放恢复软件及备份所需数据。 2. 数据恢复工具:建议使用知名软件EaseUS Data Recovery Wizard,它能有效找回误删或丢失的文件。 二、操作步骤 1. 将U盘连接至电脑,并安装好数据恢复软件。 2. 打开软…

    2026年8月30日
    000
  • win10注册表怎么打开_win10注册表编辑器打开方式

    1、通过Win+R输入regedit可快速打开注册表编辑器;2、开始菜单搜索“注册表编辑器”并以管理员身份运行;3、任务管理器中创建新任务regedit并勾选管理员权限;4、资源管理器进入System32找到regedit.exe运行;5、命令提示符或PowerShell输入regedit启动。 如…

    2026年8月30日
    000
  • 后端接口响应超时如何优化?

    提升后端接口性能,告别页面响应超时 缓慢的页面加载速度严重影响用户体验,这通常源于后端接口处理时间过长,导致页面响应超时。本文将深入探讨如何优化后端接口,从而显著提升页面响应速度。 问题: 后端接口处理时间超过前端设定的超时阈值,页面显示超时错误,用户无法获取数据。 这可能由多种因素引起,例如数据库…

    2026年8月30日
    000
  • mysql怎么删除数据库

    mysql怎么删除数据库mysql怎么删除数据库mysql怎么删除数据库mysql怎么删除数据库

    删除方法:1、使用“win+r”键打开“运行”窗口,输入“cmd”,回车进入cmd命令窗口;2、在cmd窗口中,执行“mysql -u root -p”命令登录MySQL服务器;3、执行“DROP DATABASE IF EXISTS 数据库名;”命令来删除指定数据库中的所有表并永久删除该数据库,“…

    2026年8月30日 用户投稿
    000
  • Shell命令 文件压缩解压缩之gzip、zip详解

    本篇文章的主要内容讲述的是shell命令中之文件压缩解压缩之gzip、zip,具有一定参考价值,感兴趣的朋友可以了解一下,希望对你有所帮助。  1.gzip:gzip压缩工具 gzip命令的功能说明: gzip 命令用于压缩文件。gzip 是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出 …

    用户投稿 2026年8月30日
    000
  • iphonex中设置电量百分比的简单步骤

    php小编苹果向广大iphone x用户介绍一项如何设置电量百分比的简单步骤。iphone x是苹果最新一代智能手机,它拥有出色的性能和漂亮的外观设计。无论是日常使用还是玩游戏,iphone x的电量都是必不可少的一项指标。在设置中开启电量百分比显示后,用户可以清晰地看到自己的电量剩余情况。接下来,…

    2026年8月30日
    100
  • 安徽研究未来产业时,为什么要请这一领域的“大V”?

    蛇年伊始,科普大咖袁岚峰教授便马不停蹄,不仅创作微博和短视频,参与多场科技直播,还奔赴上海电视台,主持全新科技访谈节目《锚点》。 与此同时,“科学翻译官”杨远帆及其“可视科学”团队,已成功讲述30余位院士的科研历程,生动展现了20余座国家大科学装置及重大科技基础设施的核心科研成果。这支孵化于中国科大…

    2026年8月30日
    100
  • 作者保证《Skyblivion》并非另一个版本的湮灭重制版

    在贝塞斯达推出《上古卷轴4:湮灭重制版》之后,《skyblivion》与《天风》(skywind)等玩家自制项目正加速开发进程——这些由社区打造的作品甚至有可能与官方的rpg正统作品一争高下。 《上古卷轴:复兴计划》的负责人Rebelzize在接受采访时表示,《Skyblivion》或将修复《湮灭》…

    2026年8月30日
    200

发表回复

登录后才能评论
关注微信