4147f6e7fbcf1311228dd67a99326521f42292b1.svn-base 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package io.agora.media;
  2. import java.io.ByteArrayOutputStream;
  3. public class DynamicKey3 {
  4. /**
  5. * Manipulate Agora dynamic key for media connection.
  6. *
  7. * @param appID App ID assigned by Agora when register
  8. * @param appCertificate App Certificate assigned by Agora
  9. * @param channelName name of channel to join
  10. * @param unixTs unix timestamp by seconds
  11. * @param randomInt random uint32 salt for generating dynamic key
  12. * @return String representation of dynamic key to join Agora media server
  13. * @throws Exception if any error occurs
  14. */
  15. public static String generate(String appID, String appCertificate, String channelName, int unixTs, int randomInt, long uid, int expiredTs) throws Exception {
  16. String version = "003";
  17. String unixTsStr = ("0000000000" + Integer.toString(unixTs)).substring(Integer.toString(unixTs).length());
  18. String randomIntStr = ("00000000" + Integer.toHexString(randomInt)).substring(Integer.toHexString(randomInt).length());
  19. uid = uid & 0xFFFFFFFFL;
  20. String uidStr = ("0000000000" + Long.toString(uid)).substring(Long.toString(uid).length());
  21. String expiredTsStr = ("0000000000" + Integer.toString(expiredTs)).substring(Integer.toString(expiredTs).length());
  22. String signature = generateSignature3(appID, appCertificate, channelName, unixTsStr, randomIntStr, uidStr, expiredTsStr);
  23. return String.format("%s%s%s%s%s%s%s", version, signature, appID, unixTsStr, randomIntStr, uidStr, expiredTsStr);
  24. }
  25. private static String generateSignature3(String appID, String appCertificate, String channelName, String unixTsStr, String randomIntStr, String uidStr, String expiredTsStr) throws Exception {
  26. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  27. baos.write(appID.getBytes());
  28. baos.write(unixTsStr.getBytes());
  29. baos.write(randomIntStr.getBytes());
  30. baos.write(channelName.getBytes());
  31. baos.write(uidStr.getBytes());
  32. baos.write(expiredTsStr.getBytes());
  33. byte[] sign = DynamicKeyUtil.encodeHMAC(appCertificate, baos.toByteArray());
  34. return DynamicKeyUtil.bytesToHex(sign);
  35. }
  36. }