ThinkPHP3.2 整合支付宝RSA加密方式
RSA核心加密验证算法
<?php
/**
* RSA签名
* @param $data 待签名数据
* @param $private_key 商户私钥字符串
* return 签名结果
*/
function rsaSign($data, $private_key) {
//以下为了初始化私钥,保证在您填写私钥时不管是带格式还是不带格式都可以通过验证。
$private_key=str_replace("-----BEGIN RSA PRIVATE KEY-----","",$private_key);
$private_key=str_replace("-----END RSA PRIVATE KEY-----","",$private_key);
$private_key=str_replace("\n","",$private_key); $private_key="-----BEGIN RSA PRIVATE KEY-----".PHP_EOL .wordwrap($private_key, 64, "\n", true). PHP_EOL."-----END RSA PRIVATE KEY-----"; $res=openssl_get_privatekey($private_key); if($res)
{
openssl_sign($data, $sign,$res);
}
else {
return false;
}
openssl_free_key($res);
//base64编码
$sign = base64_encode($sign);
return $sign;
} /**
* RSA验签
* @param $data 待签名数据
* @param $alipay_public_key 支付宝的公钥字符串
* @param $sign 要校对的的签名结果
* return 验证结果
*/
function rsaVerify($data, $alipay_public_key, $sign) {
//以下为了初始化私钥,保证在您填写私钥时不管是带格式还是不带格式都可以通过验证。
$alipay_public_key=str_replace("-----BEGIN PUBLIC KEY-----","",$alipay_public_key);
$alipay_public_key=str_replace("-----END PUBLIC KEY-----","",$alipay_public_key);
$alipay_public_key=str_replace("\n","",$alipay_public_key); $alipay_public_key='-----BEGIN PUBLIC KEY-----'.PHP_EOL.wordwrap($alipay_public_key, 64, "\n", true) .PHP_EOL.'-----END PUBLIC KEY-----';
$res=openssl_get_publickey($alipay_public_key);
if($res)
{
$result = (bool)openssl_verify($data, base64_decode($sign), $res);
}
else {
return false;
}
openssl_free_key($res);
return $result;
} ?>
异步回调修改如下,即可完成MD5 和 RSA的验证
/**
* 获取返回时的签名验证结果
* @param $para_temp 通知返回来的参数数组
* @param $sign 返回的签名结果
* @return 签名验证结果
*/
function getSignVeryfy($para_temp, $sign) {
//除去待签名参数数组中的空值和签名参数
$para_filter = paraFilter($para_temp); //对待签名参数数组排序
$para_sort = argSort($para_filter); //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
$prestr = createLinkstring($para_sort); $isSgin = false;
switch (strtoupper(trim($this->alipay_config['sign_type']))) {
case "MD5" :
$isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);
break;
case "RSA" :
$isSgin = rsaVerify($prestr, trim($this->alipay_config['alipay_public_key']), $sign);
break;
default :
$isSgin = false;
} return $isSgin;
}
添加配置信息:
'alipay' => array(
'partner' => '',
'seller_id' => '',
'key' => '',
'notify_url' => '',
'return_url' => '',
'sign_type' => strtoupper('MD5'),
'input_charset'=> strtolower('utf-8'),
'transport' => 'http',
'payment_type' => 1,
'service' => 'create_direct_pay_by_user',
'account' => '',
'privatekey' => '', // 私钥
'alipay_public_key' => '', // 支付宝公钥
),
因移动支付只有RSA加密,没有MD5 加密方法,所以可根据实际应用场景进行调整!
以上仅为使用过程中记录的!
ThinkPHP3.2 整合支付宝RSA加密方式的更多相关文章
- thinkphp整合系列之支付宝RSA加密方式
thinkphp整合系列之支付宝RSA加密方式上篇博客写的是MD5加密方式:thinkphp整合系列之支付宝MD5加密方式扫码支付http://baijunyao.com/article/75 但是呢 ...
- IOS RSA 加密方式
采用RSA加密方式,主要是生成公钥和私钥,公钥用来加密,私钥用来解密,至于其中如何实现的,网上有很多原理. 参见如下: https://github.com/jslim89/RSA-objc PS: ...
- 使用RSA加密方式加密文件
链接:GITHUB 使用RSA对流进行加密并保存到文件中 缺点:速度非常的慢,加密大文件就等着吧 环境 VS2017 + C# 7.0 + .net framwork 4.7.2
- 逆向番茄社区app的rsa加密方式
Parse RSA public and private key pair from string in Java 逆向某APP,发现其大部分配置文件都是加密的 .所以逆向算法并解密 RSA和AES密 ...
- 使用jsencrypt(rsa加密方式)给js加密防被刷
加密步骤 1.需要加密的参数 * * ).toISOString().replace(/T/g, }Z/, ''); //使用本地时间,然后转换格式 2.js中引用jsencrypt.js文件,然后实 ...
- GIT 用RSA加密方式来记住密码
ssh-kegen -t rsa -C "你的帐号";//生成rsa的公钥和密钥 当然这个要在GNU环境下来执行,要是用Windows的CMD是不可以的(不输入DIR时),感觉是因 ...
- RSA加密原理使用方式签名验证
RSA加密原理使用方式签名验证 加密是网络传输中非常重要的一环,它保证了信息的安全性,让他人无法通过抓包来获取通讯的信息也无法通过伪造信息而实现对系统的入侵.其中最为常用的信息传递加密方式就是RS ...
- python下RSA加密解密以及跨平台问题
Reference: http://www.cnblogs.com/luchanghong/archive/2012/07/18/2596886.html 项目合作需要,和其他网站通信,消息内容采用 ...
- 我用Django搭网站(3)-表单RSA加密
之前开发项目时因为种种原因一直使用明文提交,表单直接明文提交非常不安全,只要稍加操作就能轻易获取用户的信息.在众里寻他千百度之后决定使用RSA加密方式,简单可靠. 项目准备 一.安装PyCrypto库 ...
随机推荐
- 比较php字符串连接的效率
php字符串连接有三种方式 1)使用 . 链接 2)使用 .= 连接 3)implode 函数连接数组元素 /*以下测试在ci框架进行*/ private function get_mcrotime( ...
- 20165219 2017-2018-2 《Java程序设计》第4周学习总结
20165219 2017-2018-2 <Java程序设计>第4周学习总结 课本知识总结 第五章 在java中,继承时使用extends关键字,private成员也会被继承,只不过子类无 ...
- 一大波趣图:CSS的力量
CSS的力量 CSS的作用,一目了然~ 见识一下CSS的厉害! 用了CSS,效果显著 HTML5 + CSS3 + Javascript会怎么样? HTML ...
- JAVA学习必须掌握的框架,不看后悔
Web应用,最常见的研发语言是Java和PHP. 后端服务,最常见的研发语言是Java和C/C++. 大数据,最常见的研发语言是Java和Python. 可以说,Java是现阶段中国互联网公司中,覆盖 ...
- MySQL学习笔记(一):查询
查询实例: 1.创建数据库并使用: create database school; use school; 2.创建表并插入内容: create table student( Sno char(9) ...
- CF138D World of Darkraft
$ \color{#0066ff}{ 题目描述 }$ n*m的格子,每个格子有字符'L','R',X',初始可以选择所有格子. 当选了 'L'的格子时,当前格子左下右上这条线上所有点不能选; 当选了 ...
- IOS中NSUserDefaults的用法
NSUserDefaults适合存储轻量级本地数据,比如要保存用户登陆的用户名.密码,使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的 ...
- JsonToHtml
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Httprequest 添加Cookie
string postData = "Inputs={\"BarCode\":\"" + barCode + "\"}" ...
- Jprofiler的安装部署及使用
本地与远程安装同版本的jprofiler.以本地Windows操作系统,远程AIX操作系统为例,详细介绍安装配置步骤.本次测试使用的均是jp6版本. 一.安装Jprofiler服务端 一 般情况下,J ...