Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >易语言生成COS签名

易语言生成COS签名

原创
作者头像
yjwang
发布于 2022-01-23 11:09:25
发布于 2022-01-23 11:09:25
8.7K02
代码可运行
举报
运行总次数:2
代码可运行

目前腾讯云COS有提供常见编程语言的签名代码DEMO,但是没有使用易语言生成的;

为了方便使用,所以就在某天晚上,用掉了几根头发,编写出了易语言生成COS签名的代码

COS签名使用方法详见:https://cloud.tencent.com/document/product/436/7778#.E7.AD.BE.E5.90.8D.E4.BD.BF.E7.94.A8

核心代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.局部变量 时间值, 日期时间型
.局部变量 初始时间, 日期时间型
.局部变量 签名有效期, 整数型, , , 签名有效期
.局部变量 StartTimestamp, 整数型, , , 签名开始时间
.局部变量 EndTimestamp, 整数型, , , 签名截止时间
.局部变量 KeyTime, 文本型, , , 生成固定格式
.局部变量 SecretId, 文本型, , , 密钥ID
.局部变量 SecretKey, 文本型, , , 密钥Key
.局部变量 SignKey, 文本型, , , 计算消息摘要
.局部变量 HttpMethod, 文本型, , , 请求方法(传入小写)
.局部变量 UriPathname, 文本型, , , 请求路径(对象键)
.局部变量 HttpString, 文本型
.局部变量 HttpParameters, 文本型
.局部变量 HttpHeaders, 文本型
.局部变量 SHA1HttpString, 字节集
.局部变量 StringToSign, 文本型
.局部变量 Signature, 文本型, , , 签名头部
.局部变量 Authorization, 文本型, , , 生成最终签名


SecretId = 到文本 ('SecretId ')
SecretKey = 到文本 ('SecretKey')
签名有效期 = 到整数 ('time(s)')
初始时间 = 到时间 (1970-01-01 08:00:00)
时间值 = 取现行时间 ()
StartTimestamp = 取时间间隔 (时间值, 初始时间, #秒)
EndTimestamp = StartTimestamp + 签名有效期
KeyTime = 到文本 (StartTimestamp) + “;” + 到文本 (EndTimestamp)
输出调试文本 (KeyTime)
SignKey = 到小写 (字节集_字节集到十六进制 (EC_加密_rstr_hmac_sha1 (到字节集 (SecretKey), 到字节集 (KeyTime))))  ' 密钥,数据
输出调试文本 (SignKey)
HttpParameters = “”
HttpHeaders = “”
HttpMethod = 到文本 ('Method(需要传入小写)')
UriPathname = 到文本 ('Key(对象键)')
HttpString = HttpMethod + 字符 (10) + UriPathname + 字符 (10)字符 (10)字符 (10)
SHA1HttpString = EC_加密_rstr_sha1 (到字节集 (HttpString))
StringToSign = “sha1” + 字符 (10) + KeyTime + 字符 (10)到小写 (字节集_字节集到十六进制 (SHA1HttpString))字符 (10)
输出调试文本 (StringToSign)
Signature = 到小写 (字节集_字节集到十六进制 (EC_加密_rstr_hmac_sha1 (到字节集 (SignKey), 到字节集 (StringToSign))))
输出调试文本 (Signature)
Authorization = “q-sign-algorithm=sha1&q-ak=” + SecretId + “&q-sign-time=” + KeyTime + “&q-key-time=” + KeyTime + “&q-header-list=&q-url-param-list=&q-signature=” + Signature
输出调试文本 (Authorization)


#以下为加密算法子程序('依赖精易模块'.子程序 EC_加密_safe_add, 整数型, 公开
.参数 x, 整数型
.参数 y, 整数型
.局部变量 lsw, 整数型
.局部变量 msw, 整数型
.局部变量 return, 整数型

lsw = 位与 (x, 65535)位与 (y, 65535)
msw = 右移 (x, 16)右移 (y, 16)右移 (lsw, 16)
return位或 (左移 (msw, 16), 位与 (lsw, 65535))
返回 (return)


.子程序 EC_加密_binb_sha1, , 公开
.参数 x, 整数型, 数组
.参数 len, 整数型
.参数 return, 整数型, 参考 数组
.局部变量 w, 整数型, , "80"
.局部变量 a, 整数型
.局部变量 b, 整数型
.局部变量 c, 整数型
.局部变量 d, 整数型
.局部变量 e, 整数型
.局部变量 i, 整数型
.局部变量 xlength, 整数型
.局部变量 olda, 整数型
.局部变量 oldb, 整数型
.局部变量 oldc, 整数型
.局部变量 oldd, 整数型
.局部变量 olde, 整数型
.局部变量 j, 整数型
.局部变量 t, 整数型
.局部变量 ret, 文本型
.局部变量 tmp, 整数型

xlength = 取数组成员数 (x)
tmp = 左移 (右移 (len + 64, 9), 4)16

.如果真 (xlength < tmp)
    重定义数组 (x,, tmp)
.如果真结束

x [右移 (len, 5)1]位或 (x [右移 (len, 5)1], 左移 (128, 24 - len % 32))
x [左移 (右移 (len + 64, 9), 4)16] = len
xlength = 取数组成员数 (x)
a = 1732584193
b = -271733879
c = -1732584194
d = 271733878
e = -1009589776

.变量循环首 (0, xlength, 16, i)
    .如果真 (i ≥ xlength)
        跳出循环 ()
    .如果真结束
    olda = a
    oldb = b
    oldc = c
    oldd = d
    olde = e
    .变量循环首 (0, 80, 1, j)
        .如果真 (j ≥ 80)
            跳出循环 ()
        .如果真结束
        .如果 (j < 16)
            w [j + 1] = x [i + j + 1]
            ' 调试输出 (w [j + 1], j + 1)
        .否则
            w [j + 1]EC_加密_bit_rol (位异或 (w [j - 31], w [j - 81], w [j - 141], w [j - 161]), 1)
            ' 调试输出 (w [j + 1], j + 1)
        .如果结束
        ' w [j + 1]0
        t = EC_加密_safe_add (EC_加密_safe_add (EC_加密_bit_rol (a, 5), EC_加密_sha1_ft (j, b, c, d)), EC_加密_safe_add (EC_加密_safe_add (e, w [j + 1]), EC_加密_sha1_kt (j)))
        e = d
        d = c
        c = EC_加密_bit_rol (b, 30)
        b = a
        a = t

    .变量循环尾 ()


    a = EC_加密_safe_add (a, olda)
    b = EC_加密_safe_add (b, oldb)
    c = EC_加密_safe_add (c, oldc)
    d = EC_加密_safe_add (d, oldd)
    e = EC_加密_safe_add (e, olde)

.变量循环尾 ()
重定义数组 (return,, 5)
return [1] = a
return [2] = b
return [3] = c
return [4] = d
return [5] = e





.子程序 EC_加密_binb2rstr, 字节集, 公开
.参数 input, 整数型, 数组
.局部变量 output, 字节集
.局部变量 length, 整数型
.局部变量 i, 整数型


length = 取数组成员数 (input) × 32
.变量循环首 (0, length, 8, i)
    .如果真 (i ≥ length)
        跳出循环 ()
    .如果真结束

    output = output + 到字节集 (到字节 (位与 (EC_加密_逻辑右移 (input [右移 (i, 5)1], 24 - i % 32), 255)))
.变量循环尾 ()
返回 (output)


.子程序 EC_加密_rstr_sha1, 字节集, 公开
.参数 s, 字节集
.局部变量 容器1, 整数型, , "0"
.局部变量 容器2, 整数型, , "0"

EC_加密_rstr2binb (s, 容器1)
EC_加密_binb_sha1 (容器1, 取字节集长度 (s) × 8, 容器2)
返回 (EC_加密_binb2rstr (容器2))



.子程序 EC_加密_rstr_hmac_sha1, 字节集, 公开
.参数 key, 字节集
.参数 data, 字节集
.局部变量 bkey, 整数型, , "0"
.局部变量 length, 整数型
.局部变量 ipad, 整数型, , "16"
.局部变量 opad, 整数型, , "16"
.局部变量 i, 整数型
.局部变量 数组容器, 整数型, , "0"
.局部变量 hash, 整数型, , "0"

EC_加密_rstr2binb (key, bkey)

length = 取数组成员数 (bkey)
.如果真 (length > 16)
    EC_加密_binb_sha1 (bkey, 取字节集长度 (key) × 8, bkey)
.如果真结束

.如果真 (取数组成员数 (bkey)16)
    重定义数组 (bkey,, 16)
.如果真结束

.变量循环首 (1, 16, 1, i)
    ipad [i]位异或 (bkey [i], 909522486)
    opad [i]位异或 (bkey [i], 1549556828)

.变量循环尾 ()
EC_加密_rstr2binb (data, 数组容器)
加入成员 (ipad, 数组容器)

EC_加密_binb_sha1 (ipad, 512取字节集长度 (data) × 8, hash)
清除数组 (数组容器)
加入成员 (opad, hash)

EC_加密_binb_sha1 (opad, 512160, 数组容器)
返回 (EC_加密_binb2rstr (数组容器))




.子程序 EC_加密_rstr2binb, , 公开
.参数 input, 字节集
.参数 output, 整数型, 数组
.局部变量 inputlength, 整数型
.局部变量 outputlength, 整数型
.局部变量 i, 整数型
.局部变量 jp, 整数型

inputlength = 取字节集长度 (input)
重定义数组 (output,, 右移 (inputlength, 2))
outputlength = 取数组成员数 (output)
.如果真 (outputlength < 右移 (inputlength × 8, 5)1)
    重定义数组 (output,, 右移 (inputlength × 8, 5)1)
.如果真结束

.变量循环首 (0, outputlength, 1, i)
    .如果真 (i ≥ outputlength)
        跳出循环 ()
    .如果真结束
    output [i + 1]0
.变量循环尾 ()
i = 0
.变量循环首 (0, inputlength × 8, 8, i)
    .如果真 (i ≥ inputlength × 8)
        跳出循环 ()
    .如果真结束

    output [右移 (i, 5)1]位或 (output [右移 (i, 5)1], 左移 (位与 (input [i ÷ 81], 255), 24 - i % 32))
.变量循环尾 ()


.子程序 EC_加密_bit_rol, 整数型, 公开
.参数 num, 整数型
.参数 cnt, 整数型
.局部变量 return, 整数型

return位或 (左移 (num, cnt), EC_加密_逻辑右移 (num, 32 - cnt))
返回 (return)



.子程序 EC_加密_sha1_kt, 整数型, 公开
.参数 t, 整数型

.判断开始 (t < 20)
    返回 (1518500249)
.判断 (t < 40)
    返回 (1859775393)
.判断 (t < 60)
    返回 (-1894007588)
.默认
    返回 (-899497514)
.判断结束




.子程序 EC_加密_sha1_ft, 整数型, 公开
.参数 t, 整数型
.参数 b, 整数型
.参数 c, 整数型
.参数 d, 整数型

.如果真 (t < 20)
    返回 (位或 (位与 (b, c), 位与 (位取反 (b), d)))
.如果真结束

.如果真 (t < 40)
    返回 (位异或 (b, c, d))
.如果真结束

.如果真 (t < 60)
    返回 (位或 (位与 (b, c), 位与 (b, d), 位与 (c, d)))
.如果真结束

返回 (位异或 (b, c, d))

.子程序 EC_加密_逻辑右移, 整数型, 公开, (逻辑右移) (算术右移) 寄存器,1
.参数 欲移动的整数, 整数型
.参数 欲被移动的位数, 字节型

置入代码 ({ 81, 139, 69, 8, 138, 77, 12, 211, 232, 89, 139, 229, 93, 194, 8, 0 })
返回 (-1)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
监控 Kubernetes 集群证书过期时间的三种方案
Kubernetes 中大量用到了证书, 比如 ca证书、以及 kubelet、apiserver、proxy、etcd等组件,还有 kubeconfig 文件。
东风微鸣
2022/12/01
2.2K0
监控 Kubernetes 集群证书过期时间的三种方案
Kubernetes(k8s)-Ingress介绍&安装
作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2025/01/15
3980
Kubernetes(k8s)-Ingress介绍&安装
kubernetes(十三) k8s 集群监控
Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,拥有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算基金会(CNCF),成为继Kubernetes之后的第二个托管项目。
alexhuiwang
2020/09/23
1.5K0
kubernetes(十三) k8s 集群监控
Prometheus Operator与kube-prometheus之二-如何监控1.23+ kubeadm集群
•系列文章: 标签 - Prometheus - 东风微鸣技术博客 (ewhisper.cn)[1]•Prometheus Operator 的上一篇: Prometheus Operator 与 kube-prometheus 之一 - 简介 - 东风微鸣技术博客 (ewhisper.cn)[2]
东风微鸣
2022/12/01
7240
Prometheus Operator与kube-prometheus之二-如何监控1.23+ kubeadm集群
DCGM:监控Kubernetes集群的GPU资源
<Kubelet从入门到放弃>系列将对Kubelet组件由基础知识到源码进行深入梳理。因上篇文章Kubelet从入门到放弃系列:GPU加持中介绍了Nvidia系列GPU如何加持Kubernetes,我们除了关注GPU资源的使用,也关注GPU资源的管理,因此本文推出 Kubernetes集群中如何监控GPU资源。
zouyee
2021/03/23
4.8K0
Kubernetes(k8s)-Prometheus安装
作者介绍:简历上没有一个精通的运维工程师。下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2025/03/27
2270
Kubernetes(k8s)-Prometheus安装
(3 / 3)CentOS搭建K8s微服务20条
k8s第三方资源监控资源展示平台、Prometheus(数据收集)、Grafana(数据展示)
老张的哲学
2023/01/09
5970
云原生实践总结
CLOUD NATIVE LANDSCAPE https://cncf.landscape2.io/?group=projects-and-products
SRE运维进阶之路
2024/04/23
2140
云原生实践总结
一文搞懂基于 Helm 部署 Prometheus Stack 全家桶
Hello folks! 今天我们介绍一下基于 Helm 快速部署安装 Prometheus Stack 的文章,在本文中,我们将讨论 Prometheus 和 Grafana,以及如何使用 Helm 图表为任何 Kubernetes 集群设置监控。我们还将学习如何将 Prometheus 和 Grafana 连接在一起,并在 Grafana 上设置一个基本的仪表板来监控 Kubernetes 集群上的资源。
Luga Lee
2023/02/14
5.5K3
一文搞懂基于 Helm 部署 Prometheus Stack 全家桶
kubernetes监控-prometheus(十六)
通过各种exporter采集不同维度的监控指标,并通过Prometheus支持的数据格式暴露出来,Prometheus定期pull数据并用Grafana展示,异常情况使用AlertManager告警。
yuezhimi
2020/09/30
8280
kubernetes监控-prometheus(十六)
kubernetes(十六) k8s 弹性伸缩
常规的做法是给集群资源预留保障集群可用,通常20%左右。这种方式看似没什么问题,但放到Kubernetes中,就会发现如下2个问题。
alexhuiwang
2020/09/23
3.9K0
kubernetes(十六) k8s 弹性伸缩
Kubernetes微服务监控体系
监控系统是运维体系乃至整个软件产品生命周期中最重要的一环,完善的监控可以帮助我们事前及时发现故障,事后快速追查定位问题。而在以微服务为代表的云原生架构体系中,系统分为多个层次,服务之间调用链路复杂,系统中需要监控的目标非常多,如果没有一个完善的监控系统就难以保证整体服务的持续稳定。
用户5927304
2020/12/11
1.9K0
Kubernetes微服务监控体系
k8s-1.30.1版本一站式部署监控服务
官网:https://kubecm.cloud/zh-cn/introduction
希里安
2024/07/25
1930
k8s-1.30.1版本一站式部署监控服务
使用 OpenTelemetry Collector 采集 Kubernetes 指标数据
Kubernetes 已成为一个被广泛采用的行业工具,对可观测性工具的需求也在不断增加。为此,OpenTelemetry 创建了许多不同的工具,来帮助 Kubernetes 用户观察他们的集群和服务。
我是阳明
2023/09/11
2.4K0
使用 OpenTelemetry Collector 采集 Kubernetes 指标数据
Helm 安装 Kubernetes 监控套件
Helm 安装 Grafana Prometheus Altermanager 套件安装helm# 安装helm工具curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3chmod 700 get_helm.sh./get_helm.sh下载离线包# 添加 prometheus-community 官方Helm Chart仓库helm repo add prometheus-c
小陈运维
2023/02/15
1.2K0
玩转容器的正确姿势:我的 Kubernetes 编排最佳实践指南
说到容器,大家第一个想到的肯定是 Docker;但如果你的容器多到数不过来,一个个手动管肯定是不行的,这时候Kubernetes(简称 K8s)就登场了。
Echo_Wish
2025/04/28
1990
玩转容器的正确姿势:我的 Kubernetes 编排最佳实践指南
Gitlab CI 集成 Kubernetes
首先将本节所用到的代码库从 Github 上获得:cnych/gitlab-ci-k8s-demo,可以在 Gitlab 上新建一个项目导入该仓库,当然也可以新建一个空白的仓库,然后将 Github 上面的项目 Clone 到本地后,更改远程仓库地址即可:
jwangkun
2021/12/23
1.7K0
Gitlab CI 集成 Kubernetes
微服务监控神器Prometheus的安装部署
Prometheus提供了容器和云原生领域数据搜集、存储、处理、可视化和告警一套完整的解决方案,最初时是由SoundCloud公司开发的。自2012年开源以来社区成员就不断递增。如今的Prometheus已经发展到继Kubernetes后第2个正式加入CNCF基金会的项目
Java学习录
2019/05/21
9760
微服务监控神器Prometheus的安装部署
kubernetes(k8s) 安装 Prometheus + Grafana
MetricServer:是kubernetes集群资源使用情况的聚合器,收集数据给kubernetes集群内使用,如 kubectl,hpa,scheduler等。
小陈运维
2022/04/24
1.7K1
EggJS 云原生应用硬核实战(Kubernetes+Traefik+Helm+Prometheus+Grafana)
这是一个关于 Egg.js 应用上云☁️的示例,笔者所在的大前端团队的已应用于生产。
为少
2021/05/27
7630
EggJS 云原生应用硬核实战(Kubernetes+Traefik+Helm+Prometheus+Grafana)
推荐阅读
相关推荐
监控 Kubernetes 集群证书过期时间的三种方案
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验