tencent cloud

游戏多媒体引擎

产品动态
产品介绍
产品概述
优势特性
产品功能
应用场景
安全合规认证
新手指引
产品计费
免费额度
购买指南
SDK 下载指引
产品功能体验
基本功能演示
场景化 Demo 体验
控制台指南
用量查看
服务开通
快速入门
快速接入 SDK
快速接入 Sample Project
基础功能开发指南
鉴权密钥
实时语音角色设置
音质选择
进阶功能开发指南
服务端录制
万人范围语音
3D 音效
音效与伴奏
网络音频流转发路由
自定义消息通道
如何应对公司防火墙限制
语言参数参考列表
房间管理功能
客户端 API
Unity SDK
Unreal Engine SDK
Cocos2D SDK
Windows SDK
iOS SDK
Android SDK
macOS SDK
H5SDK
Electron SDK
Flutter SDK
SDK 版本升级指引
错误码
编译工具链文档
服务端 API
History
Introduction
API Category
Usage APIs
Recording APIs
Making API Requests
Voice Chat APIs
Application APIs
Data Types
Error Codes
常见问题
产品功能问题
问题解决指南
计费相关问题
Sample Project 使用问题
一般性问题
鉴权相关问题
实时语音进房失败问题
实时语音无声及音频问题
网络问题
语音转文本问题
工程导出问题
服务协议
服务等级协议
联系我们
词汇表
GME 政策
数据处理和安全协议
隐私协议

鉴权密钥

PDF
聚焦模式
字号
最后更新时间: 2026-01-27 16:49:02
为方便开发者调试和接入腾讯云游戏多媒体引擎产品,这里向您介绍适用于所有平台的鉴权密钥相关技术文档。

语音密钥后台部署

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

明文

明文为以下字段的网络序拼接:
字段描述
类型/长度
值定义/备注
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 对称加密算法。 总体建议,建议接入初期使用客户端部署方案,后面可优化为部署在游戏 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 语言的示例代码,点击下载 >>

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈