为方便开发者调试和接入腾讯云游戏多媒体引擎产品,这里向您介绍适用于所有平台的鉴权密钥相关技术文档。
语音密钥后台部署
腾讯云游戏多媒体引擎提供鉴权密钥,用于实时语音及离线语音的鉴权,此文档为后台部署方案。n鉴权所用到的签名产生过程涉及到明文、密钥和算法。
明文
明文为以下字段的网络序拼接:
字段描述 | 类型/长度 | 值定义/备注 |
cVer | unsigned char(1) | 版本号,填写数值:1 |
wOpenIDLen | unsigned short(2) | 用户的帐号长度 |
strOpenID | string | 用户的帐号字符 |
dwSdkAppid | unsigned short(4) | 开发者的 SDKappid |
dwReserved1 | unsigned int(4) | 填写数值:0 |
dwExpTime | unsigned int(4) | 过期时刻(当前时间+有效期[单位:秒,建议300秒]) |
dwReserved2 | unsigned int(4) | 填写数值:-1或者 0xFFFFFFFF |
dwReserved3 | unsigned int(4) | 填写数值:0 |
wRoomIDLen | unsigned short(2) | 用户要进入的房间号码长度,如果是离线语音服务,请填写0 |
strRoomID | string | 用户要进入的房间号码字符 |
密钥
腾讯云 GME 控制台获取相关权限密钥。
算法
TEA 对称加密算法。n总体建议,建议接入初期使用客户端部署方案,后面可优化为部署在游戏 App 后台。
方案 | 优点 | 缺点 |
后台部署 | 安全性高 | 需要后台开发联调 |
客户端部署 | 接入快速 | 安全性低 |
后台部署使用方法
后台生成加密串后,下发给客户端,客户端适用于如下场景,调用 API:EnterRoom 进行进房操作时,将加密串传给进房参数的 authBuffer 字段。
算法加密详情
密钥:APPID 对应的鉴权密钥
加密算法:TEA 加密
注意
控制台修改密钥后,15分钟 - 1小时内生效,不建议频繁更换。
加密方法
1. 把明文中的数字转换成网络字节序。
2. 把明文按顺序(明文字段声明的顺序)拼接成一个字符串。
3. 用 tea 加密拼接后的字符串,symmetry_encrypt 函数输出的字符串即为权限加密串。
注意
不用要把二进制串转成16进制。
示例代码
以 C++ 语言为例,鉴权密钥示例代码如下:
unsigned char pInBuf[512]={0};xel::byte_writer bw(pInBuf, sizeof(pInBuf));char cVer = 1;unsigned short wOpenIDLen = (unsigned short)strlen((const char *)strOpenID);if (wOpenIDLen > 127) wOpenIDLen = 127;unsigned short wRoomIDLen = (unsigned short)strlen((const char *)strRoomID);if (wRoomIDLen > 127) wRoomIDLen = 127;bw.write_byte(cVer);bw.write_int16(wOpenIDLen);bw.write_bytes(strOpenID, wOpenIDLen);bw.write_int32(dwSdkAppId);bw.write_int32(0 /*dwRoomID*/);bw.write_int32(expTime);bw.write_int32(nAuthBits);bw.write_int32(0 /*dwAccountType*/);bw.write_int16(wRoomIDLen);bw.write_bytes(strRoomID, wRoomIDLen);int pInLen = bw.bytes_write();unsigned char pEncryptOutBuf[512] = { 0 };int iEncrptyLen = 0;symmetry_encrypt((const unsigned char*)pInBuf, pInLen, (const unsigned char*)key, (unsigned char*)pEncryptOutBuf, &iEncrptyLen);
我们也提供了 Java 和 Go 语言的示例代码,点击下载 >>