SocketSecurity.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Leo
  5. * Date: 2018/5/4
  6. * Time: 下午10:08
  7. */
  8. namespace anlity\swooleAsyncTimer\src;
  9. class SocketSecurity {
  10. public $setting;
  11. public function __construct($setting){
  12. $this->setting = $setting;
  13. }
  14. /**
  15. * 获取密钥
  16. * @return string
  17. */
  18. public function getAuthKey(){
  19. return $this->setting['auth_key'];
  20. }
  21. /**
  22. * 获取允许的时间差
  23. * @return string
  24. */
  25. public function getTimeDiff(){
  26. return $this->setting['max_time_diff'];
  27. }
  28. /**
  29. * 生成签名
  30. * @param array $params
  31. * @return array
  32. */
  33. public function paramsFormat(array $params){
  34. if(!isset($params['timestamp'])){
  35. $params['timestamp'] = time();
  36. }
  37. if(isset($params['signature'])){
  38. unset($params['signature']);
  39. }
  40. ksort($params);
  41. $string = '';
  42. foreach($params as $key=>$value){
  43. $string .= $key.'='.$value . '&';
  44. }
  45. $params['signature'] = sha1(trim($string,'&') . $this->getAuthKey());
  46. return $params;
  47. }
  48. /**
  49. * 验证签名
  50. * @param $signature
  51. * @param array $params
  52. * @return bool
  53. */
  54. public function checkSignature($signature, array $params){
  55. $params = $this->paramsFormat($params);
  56. if($params['signature'] !== $signature){
  57. return false;
  58. }
  59. $timeDiff = (int)$this->getTimeDiff();
  60. if($timeDiff > 0 && (time() -> $params['timestamp']) > $timeDiff){
  61. return false;
  62. }
  63. return true;
  64. }
  65. }