一、签名生成原理
阿里云短信API接口采用HMAC-SHA1算法生成签名,其核心步骤包括:将请求参数规范化排序、构建签名字符串、使用AccessKey Secret进行加密,最终生成Base64编码的签名值。此签名用于验证请求合法性,防止数据篡改。
二、环境准备
生成签名前需完成以下准备工作:
- 注册阿里云账号并通过实名认证
- 开通短信服务并获取AccessKey ID/Secret
- 申请审核通过的短信签名和模板
三、签名生成步骤
按照阿里云官方规范,签名生成流程如下:
- 拼接请求参数并UTF-8编码
- 按参数名称字典序排序
- 构建规范化字符串:
key1=value1&key2=value2
- 生成签名字符串:
GET&%2F&[规范字符串]
- 使用HMAC-SHA1加密并Base64编码
四、代码实例
以下Python示例演示签名生成过程:
def generate_signature(secret, params): sorted_params = sorted(params.items) query_str = urllib.parse.urlencode(sorted_params) string_to_sign = 'GET&%2F&' + urllib.parse.quote(query_str) hmac_key = secret + '&' signature = base64.b64encode(hmac.new(hmac_key.encode, string_to_sign.encode, hashlib.sha1).digest) return signature.decode
调用时需传入AccessKey Secret和包含时间戳、随机数等参数的字典。
注意事项
- 参数排序必须严格按照字母升序排列
- 特殊字符需进行URL编码转换
- 时间戳格式需符合ISO8601标准
- 建议每次请求生成新的随机数(SignatureNonce)