有奖:语音产品征文挑战赛等你来> HOT
为方便开发者调试和接入腾讯云游戏多媒体引擎产品,这里向您介绍适用于所有平台的鉴权密钥相关技术文档。

语音密钥后台部署

腾讯云游戏多媒体引擎提供鉴权密钥,用于实时语音及离线语音的鉴权,此文档为后台部署方案。 鉴权所用到的签名产生过程涉及到明文密钥算法

明文

明文为以下字段的网络序拼接:
字段描述
类型/长度
值定义/备注
cVer
unsigned char(1)
版本号,填写数值:1
wOpenIDLen
unsigned short(2)
用户的账号长度
strOpenID
string
用户的账号字符
dwSdkAppid
unsigned int(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 对称加密算法。 总体建议,建议接入初期使用客户端部署方案,后面可优化为部署在游戏 App 后台。
方案
优点
缺点
后台部署
安全性高
需要后台开发联调
客户端部署
接入快速
安全性低

后台部署使用方法

后台生成加密串后,下发给客户端,客户端适用于如下场景,调用 API:EnterRoom 进行进房操作时,将加密串传给进房参数的 authBuffer 字段。

算法加密详情

密钥:APPID 对应的鉴权密钥
加密算法:TEA 加密

注意
控制台修改密钥后,15分钟 - 1小时内生效,不建议频繁更换。

加密方法

1. 把明文中的数字转换成网络字节序。
2. 把明文按顺序(明文字段声明的顺序)拼接成一个字符串。
3. 用 tea 加密拼接后的字符串,symmetry_encrypt 函数输出的字符串即为权限加密串。
注意
不用要把二进制串转成十六进制。

示例代码

以 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);
我们也提供了C++、 Java 和 Go 语言的示例代码,点击下载 >>