为了账号安全,请及时绑定邮箱和手机立即绑定

PHP支付接口RSA验证

标签:
PHP

这几天一直困扰的PHP RSA签名验证问题终于解决了,在这里记录一下。据我所知,国内大部分支付接口都支持RSA签名验证,有的甚至只提供RSA验签。

支付接口采用的算法列表(我遇到过的):

  • 建设银行网上银行 RSA签名(MD5withRSA)

  • 联通短信支付 RSA签名(MD5withRSA/SHA1withRSA)

  • 支付宝支持 DSA签名、RSA签名、MD5签名

PHP 验签

Sign 验签数据准备:

  • 公钥(Public key)

  • Sign签名(一般是base64加密过的)

  • Data参数(参数列表,Sign对应的参数值)

php的openssl扩展里已经封装好了验签的方法openssl_verify。

如果在Windows下的php.ini需要开启Openssl模块:

extension=php_openssl.dll

这里再解释一下openssl_verify函数:

int openssl_verify ( string $data , string $signature , mixed $pub_key_id [, int $signature_alg = OPENSSL_ALGO_SHA1 ] )

openssl_verify() 函数来验证sign签名是否正确,是通过指定的data数据和公钥相关的pub_key_id来实现的。

从支付接口获取到的公钥Public key,如下:

—–BEGIN PUBLIC KEY—–
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxJUb3d2QTkW67SILT33Y
GqmP8HmXqtXpM5DPKFibkMs2f6tk+52qe3aOb4/bryqG754o5s1Yg/9o9duwE3VL
If9tuFVQ6TSrN2cacjDNXsW3aIkk6HdBvytrj/XJePQIXmjZZjPGqbDdItmJxUI+
HXYDxiaZIe4kuVRA8FbKr6iZ5uW9bfO5N2GY+IncPFFZivDa2Xq8kuOwxyZXi+cX
4W9LnsYrkq3jZ5/9RGNGzXJMs+GkFUKFqaHWhqW5xAwsKQcD8xiLuwAHt6wGIfy1
R2yQQQwetK02i44MvKRCEX8tlUYvCvr0T38B3kX2hHgmIxP3Cpv5jbJts+mMD7cG
iQIDAQAB
—–END PUBLIC KEY—–

注意这个是2048位的公钥应该是9行或者10行,不能为1行,不然PHP的openssl_pkey_get_public无法读取,pub_key_id的结果为false,我就在这个上吃了大亏。如果没有—–BEGIN PUBLIC KEY—– 和 —–END PUBLIC KEY—– 可以自己加上,最后保存到一个rsa_public_key.pem文件中。

如果是1024位的公钥,应该是6行或者7行。


查看更多: PHP支付接口RSA验证 | LixiPHP - 专注于建设高品质网站!http://blog.lixiphp.com/php-rsa/#ixzz2jjqQEWdS


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消