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加密方式的更多相关文章

  1. thinkphp整合系列之支付宝RSA加密方式

    thinkphp整合系列之支付宝RSA加密方式上篇博客写的是MD5加密方式:thinkphp整合系列之支付宝MD5加密方式扫码支付http://baijunyao.com/article/75 但是呢 ...

  2. IOS RSA 加密方式

    采用RSA加密方式,主要是生成公钥和私钥,公钥用来加密,私钥用来解密,至于其中如何实现的,网上有很多原理. 参见如下: https://github.com/jslim89/RSA-objc PS: ...

  3. 使用RSA加密方式加密文件

    链接:GITHUB 使用RSA对流进行加密并保存到文件中 缺点:速度非常的慢,加密大文件就等着吧 环境 VS2017 + C# 7.0 + .net framwork 4.7.2

  4. 逆向番茄社区app的rsa加密方式

    Parse RSA public and private key pair from string in Java 逆向某APP,发现其大部分配置文件都是加密的 .所以逆向算法并解密 RSA和AES密 ...

  5. 使用jsencrypt(rsa加密方式)给js加密防被刷

    加密步骤 1.需要加密的参数 * * ).toISOString().replace(/T/g, }Z/, ''); //使用本地时间,然后转换格式 2.js中引用jsencrypt.js文件,然后实 ...

  6. GIT 用RSA加密方式来记住密码

    ssh-kegen -t rsa -C "你的帐号";//生成rsa的公钥和密钥 当然这个要在GNU环境下来执行,要是用Windows的CMD是不可以的(不输入DIR时),感觉是因 ...

  7. RSA加密原理使用方式签名验证

      RSA加密原理使用方式签名验证 加密是网络传输中非常重要的一环,它保证了信息的安全性,让他人无法通过抓包来获取通讯的信息也无法通过伪造信息而实现对系统的入侵.其中最为常用的信息传递加密方式就是RS ...

  8. python下RSA加密解密以及跨平台问题

    Reference:  http://www.cnblogs.com/luchanghong/archive/2012/07/18/2596886.html 项目合作需要,和其他网站通信,消息内容采用 ...

  9. 我用Django搭网站(3)-表单RSA加密

    之前开发项目时因为种种原因一直使用明文提交,表单直接明文提交非常不安全,只要稍加操作就能轻易获取用户的信息.在众里寻他千百度之后决定使用RSA加密方式,简单可靠. 项目准备 一.安装PyCrypto库 ...

随机推荐

  1. C# 根据论文 像素差异算法【个人实验还是比较好使的】

    论文地址:http://www.docin.com/p-1081596986.html 具体代码: 我转YUV,再通过上面的论文的方式比较近. YVU 介绍:https://blog.csdn.net ...

  2. JAVA格式化当前日期或者取年月日

    Date d = new Date(); System.out.println(d); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M ...

  3. Object C语法学习笔记(二)

    1.@property与@synthesize配对使用. @property预编译指令的作用是自动声明属性的setter和getter方法. @synthesize 创建了该属性的访问代码 功能:让编 ...

  4. 定时器timer类

    timer类 Timer(定时器)是Thread的派生类,用于在指定时间后调用一个方法. 构造方法: Timer(interval, function, args=[], kwargs={})  in ...

  5. 标准模板库使用参考——vector向量容器

    C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法. 在C++标准库中,ST ...

  6. Qt 学习之路 2(57):可视化显示数据库数据

    Qt 学习之路 2(57):可视化显示数据库数据(skip) 豆子 2013年6月26日 Qt 学习之路 2 26条评论 前面我们用了两个章节介绍了 Qt 提供的两种操作数据库的方法.显然,使用QSq ...

  7. EasyUI学习笔记(一)EasyUI入门

    一.EasyUI下载 EasyUI官方下载地址:http://www.jeasyui.com/download/index.php,目前最新的版本是:jquery-easyui-1.7.2 解压后得到 ...

  8. Python-is, ==, cmp()

    is 主要是判断 2 个变量是否引用的是同一个对象,如果是的话,则返回 true,否则返回 false. 判断数字相等不要用 is 操作符 1 2 3 4 5 6 7 8 9 10 11 12 > ...

  9. CF F - Tree with Maximum Cost (树形DP)给出你一颗带点权的树,dist(i, j)的值为节点i到j的距离乘上节点j的权值,让你任意找一个节点v,使得dist(v, i) (1 < i < n)的和最大。输出最大的值。

    题目意思: 给出你一颗带点权的树,dist(i, j)的值为节点i到j的距离乘上节点j的权值,让你任意找一个节点v,使得dist(v, i) (1 < i < n)的和最大.输出最大的值. ...

  10. 51nod - 1163 巧妙的并查集 O(1)维护区间

    有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该任务,就可以获得对应的奖励.完成每一个任务所需的时间都是1个单位时间.有时候完成所有任务是不可能的,因为时间上可能会有冲突 ...