RSAUtil.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace XiTaiYouPay\util;
  3. /**
  4. * RSA工具类
  5. */
  6. class RSAUtil
  7. {
  8. public $private_key;
  9. public $public_key;
  10. /**
  11. * 利用构造函数,初始化值
  12. * @param $private_str 私钥串
  13. * @param $public_str 公钥串
  14. */
  15. function __construct($private_str, $public_str)
  16. {
  17. /**
  18. * TODO:以下两行代码,是因为从常量中读取密钥,其为一行数据,且其并无前后标识
  19. */
  20. $private_str = "-----BEGIN RSA PRIVATE KEY-----\n" .
  21. $private_str.
  22. "\n-----END RSA PRIVATE KEY-----";
  23. $public_str = "-----BEGIN PUBLIC KEY-----\n" .
  24. $public_str.
  25. "\n-----END PUBLIC KEY-----";
  26. $this->private_key = openssl_get_privatekey($private_str);
  27. $this->public_key = openssl_get_publickey($public_str);
  28. }
  29. /**
  30. * 创建RSA签名
  31. * @param $original_str 原数据
  32. * @return string 签名
  33. */
  34. public function createRSASign($original_str)
  35. {
  36. openssl_sign($original_str, $sign, $this->private_key);
  37. return base64_encode($sign);
  38. }
  39. /**
  40. * RSA验签
  41. * @param $original_str 原数据
  42. * @param $sign 签名
  43. * @return bool 验签结果
  44. */
  45. public function verifyRSASign($original_str, $sign)
  46. {
  47. return (bool)openssl_verify($original_str, base64_decode($sign), $this->public_key);
  48. }
  49. /**
  50. * 创建RSA2的签名
  51. * @param $original_str 原数据
  52. * @return string 签名
  53. */
  54. public function createRSA2Sign($original_str)
  55. {
  56. openssl_sign($original_str, $sign, $this->private_key, OPENSSL_ALGO_SHA256);
  57. return base64_encode($sign);
  58. }
  59. /**
  60. * RSA2验签
  61. * @param $original_str 原数据
  62. * @param $sign 签名
  63. * @return bool 验签结果
  64. */
  65. public function verifyRSA2Sign($original_str, $sign)
  66. {
  67. return (bool)openssl_verify($original_str, base64_decode($sign), $this->public_key, OPENSSL_ALGO_SHA256);
  68. }
  69. /**
  70. * RSA加密
  71. * @param $original_str 原数据
  72. * @return string 加密后的数据
  73. */
  74. public function encryptData($original_str)
  75. {
  76. openssl_public_encrypt($original_str, $result, $this->public_key, OPENSSL_PKCS1_PADDING);
  77. return base64_encode($result);
  78. }
  79. /**
  80. * RSA解密
  81. * @param $encrypted_data 加密的数据
  82. * @return mixed 加密后的数据
  83. */
  84. public function decryptData($encrypted_data)
  85. {
  86. openssl_private_decrypt(base64_decode($encrypted_data), $result, $this->private_key, OPENSSL_PKCS1_PADDING);
  87. return $result;
  88. }
  89. }