alipay_rsa.function.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. /* *
  3. * 支付宝接口RSA函数
  4. * 详细:RSA签名、验签、解密
  5. * 版本:3.3
  6. * 日期:2012-07-23
  7. * 说明:
  8. * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
  9. * 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
  10. */
  11. /**
  12. * RSA签名
  13. * @param $data 待签名数据
  14. * @param $private_key 商户私钥字符串
  15. * return 签名结果
  16. */
  17. function rsaSign($data, $private_key) {
  18. //以下为了初始化私钥,保证在您填写私钥时不管是带格式还是不带格式都可以通过验证。
  19. $private_key=str_replace("-----BEGIN RSA PRIVATE KEY-----","",$private_key);
  20. $private_key=str_replace("-----END RSA PRIVATE KEY-----","",$private_key);
  21. $private_key=str_replace("\n","",$private_key);
  22. $private_key="-----BEGIN RSA PRIVATE KEY-----".PHP_EOL .wordwrap($private_key, 64, "\n", true). PHP_EOL."-----END RSA PRIVATE KEY-----";
  23. $res=openssl_get_privatekey($private_key);
  24. if($res)
  25. {
  26. openssl_sign($data, $sign,$res);
  27. }
  28. else {
  29. echo "您的私钥格式不正确!"."<br/>"."The format of your private_key is incorrect!";
  30. exit();
  31. }
  32. openssl_free_key($res);
  33. //base64编码
  34. $sign = base64_encode($sign);
  35. return $sign;
  36. }
  37. /**
  38. * RSA验签
  39. * @param $data 待签名数据
  40. * @param $alipay_public_key 支付宝的公钥字符串
  41. * @param $sign 要校对的的签名结果
  42. * return 验证结果
  43. */
  44. function rsaVerify($data, $alipay_public_key, $sign) {
  45. //以下为了初始化私钥,保证在您填写私钥时不管是带格式还是不带格式都可以通过验证。
  46. $alipay_public_key=str_replace("-----BEGIN PUBLIC KEY-----","",$alipay_public_key);
  47. $alipay_public_key=str_replace("-----END PUBLIC KEY-----","",$alipay_public_key);
  48. $alipay_public_key=str_replace("\n","",$alipay_public_key);
  49. $alipay_public_key='-----BEGIN PUBLIC KEY-----'.PHP_EOL.wordwrap($alipay_public_key, 64, "\n", true) .PHP_EOL.'-----END PUBLIC KEY-----';
  50. $res=openssl_get_publickey($alipay_public_key);
  51. if($res)
  52. {
  53. $result = (bool)openssl_verify($data, base64_decode($sign), $res);
  54. }
  55. else {
  56. echo "您的支付宝公钥格式不正确!"."<br/>"."The format of your alipay_public_key is incorrect!";
  57. exit();
  58. }
  59. openssl_free_key($res);
  60. return $result;
  61. }
  62. ?>