1.使用支付宝SDK,本次使用的SDK是老版

支付宝文档:https://opendocs.alipay.com/open/54/103419

首先下载或使用新上线的Web在线加密,生成应用私钥与应用公钥

以Web在线加密为示例:https://miniu.alipay.com/keytool/create

支付宝SDK代码示例:

目录结构:


代码片段:

<?php
//引入
require_once '../AopClient.php';class SignTest
{protected $aop;protected $private_key;protected $alipayrsa_public_key;public function __construct(){$aop = new AopClient();$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';$aop->appId = '2021';$aop->apiVersion = '1.0';$aop->signType = 'RSA2';$aop->postCharset = 'utf-8';$aop->format = 'json';//应用私钥$private_key = 'MIIEpAIBAAKCAQEAwd+e6eZAEW9u0zaOKog5orZMgXR9duL3L+mwUCwb3AntIz6Ofst/AX5TS3g74crjXvfZgD5JMrBoRhPFFxCBb66MfxViinr41J0n0LxHlm/UYAMVcN0795lV0MRmJ9PiplCa/3mxG7prAPukqxAFM5BYvaTBucVSgRKrUVODouxcQuuFvr9uNMNS/T03/mSgWJTRtUHg1Wz9bncnFJUmr56ij10yYIAQD8FjGuga87jKi79/DnSgeF90qUoXeCY6ezlsO8NJ4pwVPqppWBxRSDok4qCPYnPLRmswFB46GViXmL6b4UnI/gxUSj6pFPhq6b3J648sz5RgfTzodOipOQIDAQABAoIBAEFbLkoxaZW3GAgx0vk5lRxqEh5t88G5P5UyVVKhm/6whfWkqArMdRM+z7uYW6+BYubn7LWTyb9BwtUk4wMkeE367LgGsIJ4dBvQotR2NDfdmR2IzJiQrB+K3GgVXU692iEw+R94maD8VggtzNQyAV7hoVjFCt2iTG7gqUowOicYqV+W0fbnhKgDVcRGr6ecybvtTe/VkLpehOwFvUacNnAK3xOCaXAiPu7jM71Uouu0cvs5ypFPp7evpeHnEhgQ5YVT6cnMdBqL2ZC/BxO0KUipraBe1rLvrJw1R6fbwgtjXmpcCX0d2yNiiohCdDI9yKjq2BTGb49J34Ls9TYsHuUCgYEA/39pRqGxKUgTaTlBXsyI55RrlGZb+lqmwmthJTStv0CuXFtD04oSrgvHbv9EnhgntMgrdzZfSx//EqylVSwHJtfvX0nO/zMuGXAYMGCsZJl2yPBZy/pB2gu1quoZbsx89Y9lFnKJn59g8npK/JMpAu+Tt38lmZMLvZ+pDUtqz78CgYEAwkEx4bMAn9g2XTQcD+grQ91OJZlLeAGaLAL/R/CAwzDchDELxHnNKdOnyrBBBt77ERwP5vJBs30dp/Hy8GbmYmr4NSItmqNhGN9sh+QtHKIfKaIn58JdH0RxmLXfpWhld5VgwOWz4zqFQrPXTXuEugTyRGSG6Rcuvl1ejXShxQcCgYEAtzgSMbGADx99tAZ4B1hbkN5Ra2Ef8l+RmHhSeNDXDACBSP+1mvw3uxH9WW67MTgXOUAWU23tVj1CuIyQH4zsMAHHyahvRXjZRSqqXf7lgVq/4QbjDjCPiqK9CyzHQjpoHdxP3JIUeSBc8GWcYpXRYiaV4o/OUdwuHjRhkYQUu5cCgYAwvB6Bm2EauSnadEpeC0dffVQvxqfSccR2KkJVkBcd4VJRr+Rd5Jj+V2WPSmzmBmdCwaGTtU+acldQXTkv6wD9zAx9eBes5jRkAxm9dheDSYE79rzAPlkSkR9WyrpTSz+5orZlbruU1Ie+VlQ70jNYYAlP81CNhg1qIQ6puosjXQKBgQDC1XF0uGc67RXsteOxMx7pRTcB1+PIL/3+Ag2jZ2361qmtlp/JNUyU1ItYknG3CC8PeGaVb9xm7SLh8qP9kgMeA3Xsb55dRgC0i2x5BUvcOSLk2kMTlcfzOAtfV/EBHci8b21SGPzwyM/9hRtguKWaQ6gBB5sbaVmbWo29AqBfEw==';$aop->rsaPrivateKey = $private_key;//应用公钥$alipayrsa_public_key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwd+e6eZAEW9u0zaOKog5orZMgXR9duL3L+mwUCwb3AntIz6Ofst/AX5TS3g74crjXvfZgD5JMrBoRhPFFxCBb66MfxViinr41J0n0LxHlm/UYAMVcN0795lV0MRmJ9PiplCa/3mxG7prAPukqxAFM5BYvaTBucVSgRKrUVODouxcQuuFvr9uNMNS/T03/mSgWJTRtUHg1Wz9bncnFJUmr56ij10yYIAQD8FjGuga87jKi79/DnSgeF90qUoXeCY6ezlsO8NJ4pwVPqppWBxRSDok4qCPYnPLRmswFB46GViXmL6b4UnI/gxUSj6pFPhq6b3J648sz5RgfTzodOipOQIDAQAB';$aop->alipayrsaPublicKey = $alipayrsa_public_key;$this->aop = $aop;$this->private_key = $private_key;$this->alipayrsa_public_key = $alipayrsa_public_key;}//生成签名与验签public function createSign($type, $sign, $time){$content = array();$content['a'] = "1";$con = json_encode($content);$param['app_id'] = '2021';$param['method'] = 'www.baidu.com';//接口名称,固定值$param['charset'] = 'UTF-8';//请求使用的编码格式$param['sign_type'] = 'RSA2';//商户生成签名字符串所使用的签名算法类型$param['timestamp'] = $time;//发送请求的时间$param['version'] = '1.0';//调用的接口版本,固定为:1.0$param['biz_content'] = $con;//业务请求参数的集合,长度不限,json格式,即前面一步得到的//类型为1 生成签名if ($type == 1) {$paramStr = $this->aop->getSignContent($param);//组装请求签名参数$res = $this->aop->alonersaSign($paramStr, $this->private_key, 'RSA2', false);//生成签名return $res;} else {//类型为2 验证签名,须注意验证签名,就是生成签名的原始数据传回,并把生成的签名传入$param['sign'] = $sign;$res = $this->aop->rsaCheckV2($param, $this->alipayrsa_public_key, 'RSA2');return $res;}}//数据加密public function jiami(){// 加密内容必须为对象信息$str = '{"a":112}';$res = $this->aop->rsaEncrypt($str, $this->alipayrsa_public_key, 'UTF-8');return $res;}//数据解密public function jiemi($sign){// 解密须先 base64_decode$res = $this->aop->rsaDecrypt(base64_decode($sign, true), $this->private_key, 'UTF-8');return $res;}
}$type = $_POST['type'];
$aop = new SignTest();
//1为生成签名,2为验证签名
if ($type == 1 || $type == 2) {$sign = $_POST['sign'];$time = $_POST['time'];$res = $aop->createSign($type, $sign, $time);echo $res;
}
//数据加密
if ($type == 3) {$res = $aop->jiami();echo $res;
}
//数据解密
if ($type == 4) {// 这是数据加密的值$sign = $_POST['sign'];$res = $aop->jiemi($sign);echo $res;
}

PHP原生写法示例:

class SignTest2
{// 应用公钥private $public_key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhGYnCecQix/2Pllw5UXMKF3RgryqxXWrgoace8zUumagwX/WMeI0ZjaVFtrkUdiMpANILpB/p1u0AJAifxQuJSijR2a0oQ4zIoFbjm/HDipRcXbkeuMX4gRk863zBevfu0nNAHSReNLu9BaDwAN1OzJPWtxTFtrQ1lzKRIaVCCqDs2WAIlv979G7GQfOETWrgOr1Vy6s69VhGeKgz9+D/MOhWkaTiE+06JesIgH+ohfsH4G+Evz1kf1UYZ+ax3psQZEno3x24fAJt4CGuqj157zrb7OpRAWf/VWT8OAkp6G/y3c+YW22JcAEKlhBjijN8Y/LMoFOfeo7db0kQ51vgwIDAQAB';//应用私钥private $private_key = 'MIIEpAIBAAKCAQEAhGYnCecQix/2Pllw5UXMKF3RgryqxXWrgoace8zUumagwX/WMeI0ZjaVFtrkUdiMpANILpB/p1u0AJAifxQuJSijR2a0oQ4zIoFbjm/HDipRcXbkeuMX4gRk863zBevfu0nNAHSReNLu9BaDwAN1OzJPWtxTFtrQ1lzKRIaVCCqDs2WAIlv979G7GQfOETWrgOr1Vy6s69VhGeKgz9+D/MOhWkaTiE+06JesIgH+ohfsH4G+Evz1kf1UYZ+ax3psQZEno3x24fAJt4CGuqj157zrb7OpRAWf/VWT8OAkp6G/y3c+YW22JcAEKlhBjijN8Y/LMoFOfeo7db0kQ51vgwIDAQABAoIBADpUavSQ6RfyH+F+NB++bWCHXMtVZYMTAVnDBmQAbOQmXMKDGJHnj6BMgciM7TQlzGhhzcY+AQ9xdk8dMSV9dYsHaVAGrqOaBus3xGdvVWonOLRdZfHB5P69YuB8jWnZbjssG3YM5R4vB/lfhfHtVBOdaZqlILIb+w/F15LzG+t5b5UfvveibPp/HEhDpZJrkmaAlbzqFw8O54XB5ev0wg6kRH8uW/GrVSQqluAuOrrT8TKcfRa8lnIq2P5Fh1QMaWlW7xuYbbzCzNvFYPfY4lqxQUJof6Nk9A62htJhJadsW8GDhyF9kabRQSWP3Xmdlxqw+BvCvBnqtoeCGEGUynkCgYEA7+4B1fOpwL+J3X2Zdjil8JFnGsy51KUMyH9GfH/7iWQ3see/l/lvYrrLGKmYuV5cvU5zD/dXvImVVT5Os0pcjW79Lr9mexzBGTcGvza4bPH07XOsPayGCwu/AoJLnRp3FepZbW+S9UOnRZO+avi7zuNpnVHxReN0hsCi96F3mlUCgYEAjURafLrTkkDwn0FUxhuriXFPhZ9tUUZwKEdAxrp1dXsZL1o+Uj6rD+gqKSMx9nEPKA42N9Y98fY6PFLzXfu2slwVjQkCff1WpYpFX05w4ijz6GyidT+OVyON2QCjDWlYomWxhmMLuvK41jgKXtRitrh2pMl+XTNvBoia4+Mn6ncCgYEAnft5B/kOcJVuYQJ/1wFL+pCzdEkTn7oiJa7wqa/X38q2hZVUaexbdIYMjyu1HXHN3PTX/M5f3gw14VBKn/G56YMIgQyUnUH8v+6kqamNXGchYG0HIAEGriVI240R3tt7SFnsEowiFw86CC1Vd7haacsCUw2OsfcoVkZnyGhwiZUCgYA7a+ggFToPiA9u/b0aA+OY0bfgfhoumNFur+IYdbAYtan3WB9k2wV7kG3DlhFbF12HvMqjnBO8ZpVCcKX7/3hu9/r8szCALIM46LubhlRHXXCTcLa5WP2Xu9Xb1L/BUXG+Bcaxv5HclmKXgUUjdHT9ZQRK9pKXw53NAsMcXp2YqwKBgQCbpJs1vYCwbNWF3POYdMYGWRwNgt04277/uI8gcJt0NCBJ1HvAGo6D8uT+l//8l9tMs8eOwGSIg5xdwA4v2UOgb1N10Qm1x3/T2D+V1+RO4mrDGUpSmBDVtQYnDIdjfRitERUI1+1HIRPJ7qBMsQbSc9ySZ5WE4Aroq/zDmBha2A==';// 数据加密public function jiami(){$publicKey = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($this->public_key, 64, "\n", true) . "\n-----END PUBLIC KEY-----";//需要加密的数据$data = ['order_no' => '20212193123','money' => 99,'user_id' => 12,'pay_time' => '2021-6-18 17:02:00'];$publicKey = openssl_pkey_get_public($publicKey); //解析公钥$res = openssl_public_encrypt(json_encode($data), $encrypted, $publicKey) ? base64_encode($encrypted) : null;return $res;}// 解密public function jiemi($encrypted){$privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" . $this->private_key . "\n-----END RSA PRIVATE KEY-----";$key = openssl_pkey_get_private($privateKey); //解析私钥$encrypted = base64_decode($encrypted);//解密$res = openssl_private_decrypt($encrypted, $decrypted, $key) ? $decrypted : null;return $res;}//生成签名public function qianming(){//要签名的数据$data = ['order_no' => '20212193123','money' => 99,'user_id' => 12,'pay_time' => '2021-6-18 17:02:00'];$privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" . $this->private_key . "\n-----END RSA PRIVATE KEY-----";$privateKey = openssl_pkey_get_private($privateKey);$res = openssl_sign(json_encode($data), $sign, $privateKey, OPENSSL_ALGO_SHA256) ? base64_encode($sign) : null;return $res;}//验签public function yanqian($sign){//原始数据$data = ['order_no' => '20212193123','money' => 99,'user_id' => 12,'pay_time' => '2021-6-18 17:02:00'];$publicKey = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($this->public_key, 64, "\n", true) . "\n-----END PUBLIC KEY-----";$publicKey = openssl_pkey_get_public($publicKey);$res = openssl_verify(json_encode($data), base64_decode($sign), $publicKey, OPENSSL_ALGO_SHA256);return $res ? '正确' : '错误';}
}$test = new SignTest2();
$type1 = $_POST['type1'];
//数据加密
if ($type1 == 1) {$res = $test->jiami();echo $res;
}
//加密数据解密
if ($type1 == 2) {$sign = $_POST['sign'];$res = $test->jiemi($sign);echo $res;
}
//数据加密
if ($type1 == 3) {$res = $test->qianming();echo $res;
}
//加密数据解密
if ($type1 == 4) {$sign = $_POST['sign'];$res = $test->yanqian($sign);echo $res;
}

写在最后:

这只是记录加密与解密,签名与验签的简单使用,供学习参考,谢谢!

可以相互交流学习一下哦。

PHP 支付宝SDK加密与解密、签名与验签(含php原生写法)相关推荐

  1. ios rsa加密 java解密_iOS RSA加密与解密 签名与验签(附Java端处理)

    本篇文章将涉及以下几个操作: 1.iOS端使用RSA公钥加密,iOS端使用RSA私钥解密. 2.iOS端使用RSA私钥加签,iOS端使用RSA公钥验签. 3.iOS端使用RSA公钥加密,Java端使用 ...

  2. 支付宝APP支付-php后台签名以及验签

    签名和验签在APP端也是可以完成的,考虑到安全问题,签名和验签最好在服务端完成,支付宝官方建议也是这样的,所以php端需要把签名好的参数传给APP端.详细步骤见正文: 一. 下载php支付宝sdk h ...

  3. 支付宝请求签名php,支付宝APP之php后台签名以及验签实现方法

    签名和验签在APP端也是可以完成的,考虑到安全问题,签名和验签最好在服务端完成,支付宝官方建议也是这样的,所以php端需要把签名好的参数传给APP端.详细步骤见正文: 一. 下载php支付宝sdk h ...

  4. 支付宝开放平台2.0签名、验签失败以及PHP-SDK使用说明

    前言: 你一定像我一样对支付流程还算熟悉,但打死不从头阅读文档(逐字逐句理解),还对过往的经验沾沾自喜.盲目自大,造成验签失败! 如果你用心再看一遍官方文档,那么接下来的内容不看也罢.仅对接支付接口. ...

  5. 数字证书应用综合揭秘(包括证书生成、加密、解密、签名、验签)

    引言 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件.为现实网络安全化标准如今大部分的 B2B.B2C.P2P.O2O 等商业网站含有重要企业资料个人资料的信息资信网站 ...

  6. asp版 vbscript RSA公钥加密 / 私钥解密 / 私钥签名 / 公钥验签(支持中文)分段加密解密

    最近有空在把自己的asp站点后端函数全部整理了下,在弄RSA的时候遇到了坑了,然后找到下面这位兄弟刚好发布的文章: https://blog.csdn.net/todaygods/article/de ...

  7. 分享一个RSA加解密工具类,公钥加密私钥解密、私钥加密公钥解密、私钥签名公钥验签、生成公钥私钥

    测试: public static void main(String[] args) {try {//生成公钥私钥Map<String, Object> map = RSAUtil.ini ...

  8. RSA加密、解密、签名、验签(验证签名)RSA算法原理

    转载链接:https://www.jianshu.com/p/8dc4a5f64e06 https://www.cnblogs.com/pcheng/p/9629621.html RSA原理:http ...

  9. Java开发中的加密、解密、签名、验签,密钥,证书,这篇就够了,赶紧收藏起来

    OpenSSL和keytool 先说一下两个重要的工具 OpenSSL:OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库libssl.应用程序命令工具以及密码算法库libcrypt ...

最新文章

  1. 有名内部类 匿名内部类
  2. python培训学费多少钱-深圳龙华新区python编程培训机构,从哪几方面选择好学校...
  3. 见鬼了,VS2005发布站点不会把Global.asax复上。
  4. lumanager mysql_LuManager单独安装mysqli
  5. java世博会,反应原生失去的世博会
  6. kubectl logs -f tail 显示100_系统管理员应该知道的9个kubectl命令
  7. neo4j browser执行脚本后不提示用时_还不懂什么是分层自动化测试的,有赞的实践经历告诉你...
  8. 亲测使用 swagger 动态修改后台默认访问地址 swagger-ui.html
  9. 常见时间复杂度及对应关系
  10. epoll示例程序——服务端
  11. Unity2018.2中文更新日志速览版
  12. 联想高校AI精英挑战赛中大收官,“人工智能眼科机器人”获全国总决赛最后入场券
  13. Anders Hejlsberg谈C#、Java和C++中的泛型
  14. 聚类 6 Affinity Propagation
  15. 分层结构的生活例子_AI的分层强化学习与人脑神经机制的联系
  16. 对 Unity 动画系统 Mecanim 的调研
  17. 和弦笔记:和弦组成音/和弦命名规律/sus和add的区别
  18. 概要设计和详细设计模板_超详细的【免试拼】铝模板设计深化配模方案 非筑名铝模板设计...
  19. 矩阵求和 c语言 简单易懂
  20. 使用响应扩展的响应面(Rx)

热门文章

  1. 茶楼软件有哪些管理功能
  2. [极客大挑战 2019]RCE ME 1
  3. 酷开系统丨全新观感体验,加入酷开会员带你沉浸式K歌!
  4. 制作大屏需要什么工具?
  5. 超酷的 Vim 搜索技巧
  6. 移动端那些事儿(四)移动端开发注意事项
  7. 怎样让浏览器变身代码编辑器?
  8. Java抽象类中是否可以有构造方法
  9. matlab 多元 分布函数,matlab计算多元正态分布函数
  10. 动态规划算法下的序列问题:最长公共子序列问题和最大子段和问题