QuickService.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace app\service;
  3. /**
  4. * QuickSDK游戏同步加解密算法描述
  5. * @copyright quicksdk 2015
  6. * @author quicksdk
  7. * @version quicksdk v 0.0.1 2014/9/2
  8. */
  9. class QuickService
  10. {
  11. /**
  12. * 解密方法
  13. * $strEncode 密文
  14. * $keys 解密密钥 为游戏接入时分配的 callback_key
  15. */
  16. public static function decode($strEncode, $keys)
  17. {
  18. if (empty($strEncode)) {
  19. return $strEncode;
  20. }
  21. preg_match_all('(\d+)', $strEncode, $list);
  22. $list = $list[0];
  23. if (count($list) > 0) {
  24. $keys = self::getBytes($keys);
  25. for ($i = 0; $i < count($list); $i++) {
  26. $keyVar = $keys[$i % count($keys)];
  27. $data[$i] = $list[$i] - (0xff & $keyVar);
  28. }
  29. return self::toStr($data);
  30. } else {
  31. return $strEncode;
  32. }
  33. }
  34. /**
  35. * 计算游戏同步签名
  36. */
  37. public static function getSign($params, $md5key)
  38. {
  39. return md5($params['nt_data'] . $params['sign'] . $md5key);
  40. }
  41. /**
  42. * 转成字符数据
  43. */
  44. private static function getBytes($string)
  45. {
  46. $bytes = array();
  47. for ($i = 0; $i < strlen($string); $i++) {
  48. $bytes[] = ord($string[$i]);
  49. }
  50. return $bytes;
  51. }
  52. /**
  53. * 转化字符串
  54. */
  55. private static function toStr($bytes)
  56. {
  57. $str = '';
  58. foreach ($bytes as $ch) {
  59. $str .= chr($ch);
  60. }
  61. return $str;
  62. }
  63. /**
  64. * 将xml转为array
  65. * @param string $xml
  66. *
  67. * @return array
  68. */
  69. public static function xmlToArray($xml)
  70. {
  71. if (!$xml) {
  72. return false;
  73. }
  74. libxml_disable_entity_loader(true);
  75. $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
  76. $data = json_decode(json_encode($xmlstring),true);
  77. return $data;
  78. }
  79. }