.版本 2 .支持库 spec .支持库 eAPI .子程序 阿里云V4签名, 文本型 .参数 AccessKeyId, 文本型 .参数 AccessKeySecret, 文本型 .参数 RegionId, 文本型 .参数 ServiceName, 文本型 .局部变量 UTC时间, 文本型 .局部变量 日期, 文本型 .局部变量 规范请求, 文本型 .局部变量 待签字符串, 文本型 .局部变量 签名密钥, 字节集 .局部变量 签名, 字节集 .局部变量 最终签名, 文本型 ' 1. 获取时间戳 UTC时间 = 时间_格式化 (取现行时间 (), "yyyyMMddTHHmmssZ", 真, 真) 日期 = 取文本左边 (UTC时间, 8) ' 2. 构造规范请求 规范请求 = "GET" + 字符(10) ' HTTP Method 规范请求 = 规范请求 + "/" + 字符(10) ' CanonicalURI 规范请求 = 规范请求 + "Action=DescribeRegions&Version=2014-05-26" + 字符(10) ' CanonicalQueryString 规范请求 = 规范请求 + "content-type:application/x-www-form-urlencoded; charset=utf-8" + 字符(10) ' CanonicalHeaders 规范请求 = 规范请求 + 字符(10) ' SignedHeaders 规范请求 = 规范请求 + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ' HashedPayload ' 3. 生成待签字符串 待签字符串 = "HMAC-SHA256" + 字符(10) 待签字符串 = 待签字符串 + UTC时间 + 字符(10) 待签字符串 = 待签字符串 + 日期 + "/" + RegionId + "/" + ServiceName + "/aliyun_v4_request" + 字符(10) 待签字符串 = 待签字符串 = 待签字符串 + 校验_取sha256哈希值 (到字节集 (规范请求)) ' 4. 计算签名密钥 签名密钥 = 校验_hmac_sha256 ("aliyun_v4" + AccessKeySecret, 日期) 签名密钥 = 校验_hmac_sha256 (签名密钥, RegionId) 签名密钥 = 校验_hmac_sha256 (签名密钥, ServiceName) 签名密钥 = 校验_hmac_sha256 (签名密钥, "aliyun_v4_request") ' 5. 计算签名 签名 = 校验_hmac_sha256 (签名密钥, 待签字符串) 最终签名 = 字节集_十六进制 (签名, 假) ' 6. 构造Authorization头 返回 "HMAC-SHA256 Credential=" + AccessKeyId + "/" + 日期 + "/" + RegionId + "/" + ServiceName + "/aliyun_v4_request,SignedHeaders=content-type;host;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-version,Signature=" + 最终签名 .子程序 校验_hmac_sha256, 字节集 .参数 密钥, 字节集 .参数 数据, 文本型 返回 HMAC_SHA256 (密钥, 到字节集 (数据)) ' 需要自行实现或调用外部加密库 .子程序 校验_取sha256哈希值, 文本型 .参数 数据, 字节集 返回 字节集_十六进制 (SHA256 (数据), 假) ' 需要自行实现或调用外部加密库 |