RSA2.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace loyalsoft\Lib\Encrypt;
  3. class RSA2
  4. {
  5. public static function encryptPrivate($data, $key)
  6. {
  7. if (!defined('OPENSSL_ALGO_SHA256')) {
  8. throw new \Exception('SHA256需要在PHP>=5.4.8下才可使用');
  9. }
  10. $key = "-----BEGIN RSA PRIVATE KEY-----\n{$key}\n-----END RSA PRIVATE KEY-----";
  11. openssl_sign($data, $sign, $key, OPENSSL_ALGO_SHA256);
  12. return $sign;
  13. }
  14. public static function encryptPrivateFromFile($data, $fileName)
  15. {
  16. if (!defined('OPENSSL_ALGO_SHA256')) {
  17. throw new \Exception('SHA256需要在PHP>=5.4.8下才可使用');
  18. }
  19. $key = file_get_contents($fileName);
  20. $res = openssl_get_privatekey($key);
  21. if (!$res) {
  22. throw new \Exception('私钥文件格式错误');
  23. }
  24. openssl_sign($data, $sign, $res, OPENSSL_ALGO_SHA256);
  25. openssl_free_key($res);
  26. return $sign;
  27. }
  28. public static function verifyPublic($data, $key, $sign)
  29. {
  30. if (!defined('OPENSSL_ALGO_SHA256')) {
  31. throw new \Exception('SHA256需要在PHP>=5.4.8下才可使用');
  32. }
  33. $key = "-----BEGIN PUBLIC KEY-----\n{$key}\n-----END PUBLIC KEY-----";
  34. return 1 === openssl_verify($data, $sign, $key, OPENSSL_ALGO_SHA256);
  35. }
  36. public static function verifyPublicFromFile($data, $fileName, $sign)
  37. {
  38. if (!defined('OPENSSL_ALGO_SHA256')) {
  39. throw new \Exception('SHA256需要在PHP>=5.4.8下才可使用');
  40. }
  41. $key = file_get_contents($fileName);
  42. $res = openssl_get_publickey($key);
  43. if (!$res) {
  44. throw new \Exception('公钥文件格式错误');
  45. }
  46. $result = openssl_verify($data, $sign, $res, OPENSSL_ALGO_SHA256);
  47. openssl_free_key($res);
  48. return 1 === $result;
  49. }
  50. }