DynamicKey5.php 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. $version = "005";
  3. $NO_UPLOAD = "0";
  4. $AUDIO_VIDEO_UPLOAD = "3";
  5. // InChannelPermissionKey
  6. $ALLOW_UPLOAD_IN_CHANNEL = 1;
  7. // Service Type
  8. $MEDIA_CHANNEL_SERVICE = 1;
  9. $RECORDING_SERVICE = 2;
  10. $PUBLIC_SHARING_SERVICE = 3;
  11. $IN_CHANNEL_PERMISSION = 4;
  12. function generateRecordingKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs)
  13. {
  14. global $RECORDING_SERVICE;
  15. return generateDynamicKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs, $RECORDING_SERVICE, array());
  16. }
  17. function generateMediaChannelKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs)
  18. {
  19. global $MEDIA_CHANNEL_SERVICE;
  20. return generateDynamicKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs, $MEDIA_CHANNEL_SERVICE, array());
  21. }
  22. function generateInChannelPermissionKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs, $permission)
  23. {
  24. global $ALLOW_UPLOAD_IN_CHANNEL;
  25. global $IN_CHANNEL_PERMISSION;
  26. $extra[$ALLOW_UPLOAD_IN_CHANNEL] = $permission;
  27. return generateDynamicKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs, $IN_CHANNEL_PERMISSION, $extra);
  28. }
  29. function generateDynamicKey($appID, $appCertificate, $channelName, $ts, $randomInt, $uid, $expiredTs, $serviceType, $extra)
  30. {
  31. $signature = generateSignature($serviceType, $appID, $appCertificate, $channelName, $uid, $ts, $randomInt, $expiredTs, $extra);
  32. $content = packContent($serviceType, $signature, hex2bin($appID), $ts, $randomInt, $expiredTs, $extra);
  33. // echo bin2hex($content);
  34. global $version;
  35. return $version . base64_encode($content);
  36. }
  37. function generateSignature($serviceType, $appID, $appCertificate, $channelName, $uid, $ts, $salt, $expiredTs, $extra)
  38. {
  39. $rawAppID = hex2bin($appID);
  40. $rawAppCertificate = hex2bin($appCertificate);
  41. $buffer = pack("S", $serviceType);
  42. $buffer .= pack("S", strlen($rawAppID)) . $rawAppID;
  43. $buffer .= pack("I", $ts);
  44. $buffer .= pack("I", $salt);
  45. $buffer .= pack("S", strlen($channelName)) . $channelName;
  46. $buffer .= pack("I", $uid);
  47. $buffer .= pack("I", $expiredTs);
  48. $buffer .= pack("S", count($extra));
  49. foreach ($extra as $key => $value) {
  50. $buffer .= pack("S", $key);
  51. $buffer .= pack("S", strlen($value)) . $value;
  52. }
  53. return strtoupper(hash_hmac('sha1', $buffer, $rawAppCertificate));
  54. }
  55. function packString($value)
  56. {
  57. return pack("S", strlen($value)) . $value;
  58. }
  59. function packContent($serviceType, $signature, $appID, $ts, $salt, $expiredTs, $extra)
  60. {
  61. $buffer = pack("S", $serviceType);
  62. $buffer .= packString($signature);
  63. $buffer .= packString($appID);
  64. $buffer .= pack("I", $ts);
  65. $buffer .= pack("I", $salt);
  66. $buffer .= pack("I", $expiredTs);
  67. $buffer .= pack("S", count($extra));
  68. foreach ($extra as $key => $value) {
  69. $buffer .= pack("S", $key);
  70. $buffer .= packString($value);
  71. }
  72. return $buffer;
  73. }
  74. ?>