当前位置:网站首页>PHP非对称加密方法私钥及公钥加密解密的方法
PHP非对称加密方法私钥及公钥加密解密的方法
2022-07-02 17:59:00 【游戏编程】
私钥公钥获取方式如下:
①. 访问在线生成非对称加密公钥私钥对: http://web.chacuo.net/netrsakeypair
点击生成密钥对,删除RSA生成格式-> BEGIN RSA PRIVATE KEY 和 END PUBLIC KEY ,即第一行和最后一行。
②. 访问在线字符串文本压缩工具,删除文本中的所有新行、制表键、空格、回车、换行 字符: http://www.ab173.com/other/compress.php
将生成的公钥和私钥复制到压缩文本框中去除换行和空格
③. 把公钥上传至商户后台,平台会使用该公钥进行解密并且验签。
④. 私钥自己隐秘保存(加密用)。
<?php/** * Description: 平台公钥解密获取数据(验签) * Date: 2022/7/1 * @param $data */public function decrypt($data){ ksort($data); $toSign = ''; foreach ($data as $key => $value) { if (strcmp($key, 'sign') != 0 && $value != '') { $toSign .= $key . '=' . $value . '&'; } } $str = rtrim($toSign, '&'); $encrypted = ''; // 公钥 $pem = chunk_split($this->platform_public_key, 64, "\n"); $pem = "-----BEGIN PUBLIC KEY-----\n" . $pem . "-----END PUBLIC KEY-----\n"; $publickey = openssl_pkey_get_public($pem); $base64 = str_replace(array('-', '_'), array('+', '/'), $data['sign']); $crypto = ''; foreach (str_split(base64_decode($base64), 128) as $chunk) { openssl_public_decrypt($chunk, $decrypted, $publickey); $crypto .= $decrypted; } if ($str != $crypto) { // 验签失败 record_log([ 'msg' => '验签失败', 'data' => [ 'params' => $data, 'str' => $str, 'crypto' => $crypto, ], ], 'globalpay_payin_error_'); exit('Signature verification failed'); }}/** * Description: 私钥加密生成签名 * Date: 2022/7/1 * @param $data * @return mixed */public function encrypt($data){ ksort($data); $str = ''; foreach ($data as $k => $v) { if (!empty($v)) { $str .= (string)$k . '=' . $v . '&'; } } $str = rtrim($str, '&'); $encrypted = ''; // 私钥 $pem = chunk_split($this->mch_private_key, 64, "\n"); $pem = "-----BEGIN PRIVATE KEY-----\n" . $pem . "-----END PRIVATE KEY-----\n"; $private_key = openssl_pkey_get_private($pem); $crypto = ''; foreach (str_split($str, 117) as $chunk) { openssl_private_encrypt($chunk, $encryptData, $private_key); $crypto .= $encryptData; } $encrypted = base64_encode($crypto); $encrypted = str_replace(array('+', '/', '='), array('-', '_', ''), $encrypted); $data['sign'] = $encrypted; return $data;}作者:LordForce
游戏编程,一个游戏开发收藏夹~
如果图片长时间未显示,请使用Chrome内核浏览器。
边栏推荐
- How to enable the run dashboard function of idea
- Date tool class (updated from time to time)
- LightGroupButton* sender = static_ cast<LightGroupButton*>(QObject::sender());
- Golang concurrent programming goroutine, channel, sync
- 预处理和预处理宏
- 医院在线问诊源码 医院视频问诊源码 医院小程序源码
- UML 类图
- 【测试开发】软件测试—概念篇
- 材质UV遮罩的技巧
- How to copy and paste interlaced in Excel
猜你喜欢

Yolov3 trains its own data set to generate train txt
![[daily question] first day](/img/8c/f25cddb6ca86d44538c976fae13c6e.png)
[daily question] first day

【JVM调优实战100例】01——JVM的介绍与程序计数器

潇洒郎:彻底解决Markdown图片问题——无需上传图片——无需网络——转发给他人图片无缺失

LightGroupButton* sender = static_cast<LightGroupButton*>(QObject::sender());

How to enable the run dashboard function of idea

【JVM调优实战100例】03——JVM堆调优四例

Mysql高级篇学习总结6:索引的概念及理解、B+树产生过程详解、MyISAM与InnoDB的对比

Mysql高级篇学习总结7:Mysql数据结构-Hash索引、AVL树、B树、B+树的对比

SLC、MLC、TLC 和 QLC NAND SSD 之间的区别:哪个更好?
随机推荐
Use cheat engine to modify money, life and stars in Kingdom rush
SLC、MLC、TLC 和 QLC NAND SSD 之间的区别:哪个更好?
Progress-进度条
消息队列消息丢失和消息重复发送的处理策略
The student Tiktok publicized that his alma mater was roast about "reducing the seal of enrollment". Netizen: hahahahahahahaha
M2DGR:多源多场景 地面机器人SLAM数据集(ICRA 2022 )
When converting from list to map, if a certain attribute may cause key duplication and exceptions, you can set the way to deal with this duplication
ICDE 2023|TKDE Poster Session(CFP)
论文导读 | 机器学习在数据库基数估计中的应用
电商系统中常见的 9 大坑,你踩过没?
【测试开发】软件测试—概念篇
PyTorch函数中的__call__和forward函数
Obligatoire pour les débutants, cliquez sur deux boutons pour passer à un contenu différent
Hongmeng's fourth learning
R语言dplyr包rowwise函数、mutate函数计算dataframe数据中多个数据列在每行的最大值、并生成行最大值对应的数据列(row maximum)
9D电影是怎样的?(+维度空间常识)
R语言dplyr包filter函数筛选dataframe数据、如果需要筛选的数据列(变量)名称中包含引号则需要使用!!sym语法处理、否则因为无法处理引号筛选不到任何数据
Excel查找一列中的相同值,删除该行或替换为空值
ICDE 2023|TKDE Poster Session(CFP)
[100 cases of JVM tuning practice] 02 - five cases of virtual machine stack and local method stack tuning