签名算法

最近更新时间:2021-12-02 11:35:38

我的收藏

签名生成步骤

获取云 API 密钥

获取腾讯云用户身份密钥,即 SecretId 和 SecretKey,具体步骤如下:
1. 登录控制台,选择 云产品 > 访问管理 >API密钥管理,进入 API 密钥管理页面。
2. 获取云 API 密钥。如果您尚未创建密钥,则单击 新建密钥 即可创建一对 SecretId 和 SecretKey。

拼接明文串

按照 URL QueryString 的格式要求拼接签名明文串 original,其格式如下:
secretId=[secretId]&currentTimeStamp=[currentTimeStamp]&expireTime=[expireTime]&random=[random]&platform=[platform]&action=[action]&userId=[userId]
注意
上述 original 中的[secretId][currentTimeStamp][expireTime][random][platform][action][userId]需要自行替换成具体的参数值。
original 除了可以包含必选参数,还可包含任意多个选填参数,详细请参见 签名参数
参数值必须经过 UrlEncode,否则可能导致 QueryString 解析失败。

将明文串转为最终签名

下面以 Java 语言作为示例进行实现,其他语言的实现请参见 签名示例
1. 用已获取的 SecretKey 对明文串 original 进行 HMAC-SHA1 加密,得到 signatureTmp:
SecretKeySpec secretKey = new SecretKeySpec(this.secretKey.getBytes("UTF-8"), mac.getAlgorithm());
mac.init(secretKey);
byte[] signatureTmp = mac.doFinal(original.getBytes("UTF-8"));
2. 将明文串 original 使用 UTF-8 编码成字节数组,然后把 signatureTmp 与该数组进行合并,最后把合并后的结果进行 Base64 编码,得到最终签名 signature:
String signature = base64Encode(byteMerger(signatureTmp, original.getBytes("utf8")));

签名参数说明

参数名称
必选
类型
说明
secretId
String
云 API 密钥 中的 SecretId。
currentTimeStamp
Integer
当前 Unix 时间戳。
expireTime
Integer
签名到期 Unix 时间戳,expireTime = currentTimeStamp + 签名有效时长
random
Integer
随机数,类型为32位无符号整型。
platform
String
平台名称。
action
String
操作 API 名称,目前支持:
OpenProject:打开项目编辑页。
Upload:上传文件。
Login:客户端 API 登录。
userId
String
用户 ID,为开发者服务端用户的唯一标识。
openProject.projectId
String
项目 ID,当action=OpenProject时有效。

签名示例