Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >易语言生成COS签名

易语言生成COS签名

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

目前腾讯云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 删除。

评论
登录后参与评论
2 条评论
热度
最新
UriPathname = 到文本 ('Key(对象键)') 请问这个是什么意思啊
UriPathname = 到文本 ('Key(对象键)') 请问这个是什么意思啊
回复回复点赞举报
...
...
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
LOL换肤 学习交流
.版本 2 .子程序 注入DLL, 整数型, 公开, 成功返回DLL的模块句柄,失败或已注入返回0。 .参数 进程句柄, 整数型, , 句柄必须拥有对被注入进程的完全操作权限。注入后如果没有其他用处可以关闭该句柄。 .参数 DLL数据, 字节集 .如果真 (是否已注入 () 或 DLL数据 = { } 或 进程句柄 = 0) 返回 (0) .如果真结束 ' 将内存中的DLL写到目标进程 DataAddr = 写入内存数据_ (进程句柄, DLL数据) .如果真 (DataAddr
宗亲立牧
2019/09/07
1.5K0
Google内核浏览器 快速 轻巧 方便
没错,你看到的 QQ 浏览器,360 浏览器等等等等都是基于 Google 浏览器开源框架构造。优势需要说嘛?碾压 IE 内核 所以骚年,不动手打造一个属于你自己的浏览器?
宗亲立牧
2019/09/07
6980
js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结
写前端的时候,很多的时候是避免不了注册这一关的,但是一般的注册是没有任何的难度的,无非就是一些简单的获取用户输入的数据,然后进行简单的校验以后调用接口,将数据发送到后端,完成一个简单的注册的流程,那么一般来说,密码是不做加密的。但是也有一些数据库里面存放的是加密后的密码,这样有一个比较安全的地方在于,即使黑客将用户输入的文本密码得到了,也不知道具体是什么,因为密码是经过加密的。
何处锦绣不灰堆
2020/05/29
15.3K0
js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结
用易语言写个简单的小爬虫其中的关键点
一.请求头 ctrl+L快捷键创建变量 变量名 类型 协议参数 类_POST数据类 请求头数据 文本型 协议参数.添加 (“v”, “4.52.0”) 请求头数据 = 协议参数.获取协议头数据 () 二.请求参数比如post 变量名 类型 请求data参数 类_POST数据类 请求data提交内容 文本型 请求data参数.添加 (“type”, “0”) 请求data提交内容 = 请求data参数.获取JSON文本 () 三.进行请求 调用网页_访问S方法 .子程序 网页_访问S, 文本型, , 源码
小小咸鱼YwY
2020/09/08
2.4K0
用易语言写个简单的小爬虫其中的关键点
易语言跳出循环 c,易语言教程循环控制(到循环尾和跳出循环)[通俗易懂]
本命令转移当前程序执行位置到当前所处循环体循环尾语句的下一条语句处。本命令为初级命令。
全栈程序员站长
2022/09/14
6.9K0
易语言读取数据库
我们先用SQLiteStudio建表以及表中字段(SQLiteStudio工具可百度下载); 写程序之前对支持库进行配置,勾选Sqlite3数据库支持库而不是Sqlite数据库支持库,因为选用后者会出现一些打不开表之类的问题
用户2590762
2021/08/11
8.5K0
易语言COS分片上传写法分享分析
' a = 读入文件 (欲上传对象路径) ' ------a是文件数据 分割次数是PartNum b【】数组存放part数据
用户2551353
2021/09/28
2K0
易语言画板组件实现自绘圆形进度条源码
进度条是易语言常用的一个组件,有时候我们想让进度有个性,比如绘制一个圆形进度条,下面封装了子程序,直接调用就可以了。窗口用到三个编辑框,一个时钟,一个标签,一个画板,三个颜色选择器,效果如下图,我们可以灵活调整双环椭圆大小,颜色等等。
全栈程序员站长
2022/09/18
1.8K0
易语言画板组件实现自绘圆形进度条源码
易语言调用大漠把血蓝内力体力转化为进度条
把游戏角色的 体力、血值、内力、经验通过进度条组件动态读取显示出来,并且通过api函数SendMessage来实现进度条颜色的变化,这里我们设置了血,体力,内力,经验的不同颜色,会根据游戏时时变化百分比例,调用大漠的OCR先把数值读出来,然后换算成进度调的百分比。
全栈程序员站长
2022/09/14
7440
易语言调用大漠把血蓝内力体力转化为进度条
Pc微信转账记录Ocr识别备注 金额
半成品 百度云 Ocr 识别备注 转账金额 是之前在论坛找的 好像是拉面大佬转载的吧 忘记了. 小白没能力更新.. 窗口卡死真的无语 小白没能力后期更新就发出来玩玩吧 如果有大佬感兴趣 优化下可以给我一份吗 .版本 2 .子程序 百度云OCR识别图片, 文本型, , 论坛大佬转载的帖子 忘记谁了... .参数 图片, 字节集, , png、gif、jpg图片,尺寸不宜过大 .局部变量 XML对象, 对象 .局部变量 源代码, 字节集 .如果真 (XML对象.创建 (“Microsoft.XMLHT
宗亲立牧
2019/09/07
1.7K0
c语言基础知识菜鸟_c语言入门基础100题
C中每个变量都有其特定类型,类决定了变量存储的大小和布局(指定范围内的值都可以存储到内存中,运算符作用变量上)
全栈程序员站长
2022/09/21
9910
易语言
好歹自己学习易语言也快有一年了,也用易语言写了一些软件,特此记录一下以及对易语言的个人看法。
愧怍
2022/12/27
9.7K0
易语言
【C语言】基本语法知识&&C语言函数&&操作符详解
首先介绍一下我使用的工具:VS2019——集成了很多的功能:编辑、编译、链接、运行、调试等
用户10925563
2024/06/04
3390
【C语言】基本语法知识&&C语言函数&&操作符详解
python3+django2 开发易语言网络验证(中)
第四步:网络验证的逻辑开发 1.将model注册到adminx.py中 1.在apps/yanzheng目录下新建admin.py 文件,添加代码: import xadmin from xadmin import views from .models import Cards class BaseSetting(object): """ 引入更换主题功能 """ enable_themes = True use_bootswatch = True class
玩蛇的胖纸
2018/06/08
5.9K0
JAVA基础复习day-01
byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示。
阮键
2019/08/07
6380
Java基础全面解析——Java语言基础
高级编程语言的组成:关键字、标识符、注释、常量与变量、语句、函数、数组,下面一一介绍各个组成元素。 a)  关键字 i.  定义:关键字是一些英文单词,但在java中有特殊含义,自定义的变量不能和关键字重名。 ii.注:关键字一般都小写。 b)  标识符 i.  定义:标识符就是自定义的变量名 ii.规则:26个字母大小写、0-9、_、$组成 iii.注1:不能以数字开头 iv.注2:不能含有关键字 c)  注释 i.  注释在编译时全被删除。 ii.作用:注解程序和调试程序。 iii.    注释能用JD
大闲人柴毛毛
2018/03/09
1.1K0
7.7 实现进程内存读写
内存进程读写可以让我们访问其他进程的内存空间并读取或修改其中的数据。这种技术通常用于各种调试工具、进程监控工具和反作弊系统等场景。在Windows系统中,内存进程读写可以通过一些API函数来实现,如OpenProcess、ReadProcessMemory和WriteProcessMemory等。这些函数提供了一种通用的方式来访问其他进程的内存,并且可以用来读取或写入不同类型的数据,例如整数、字节集、浮点数等。
王 瑞
2023/09/25
5820
7.7 实现进程内存读写
【C语言】C语言入门知识
(1)全局变量------在{}外部定义的变量 (2)局部变量------在{}内部定义的变量
YoungMLet
2024/03/01
1.8K0
【C语言】C语言入门知识
C语言执行效率如何保证?
2、一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。
小林C语言
2020/12/31
6.4K0
C语言执行效率如何保证?
Java入门(2)-- 语言基础
Java程序的基本组成单位是类,类体中又包括属性和方法两个部分。每个应用程序都必须包含一个main()方法,含有main()方法的类称为主类。
爱学习的程序媛
2022/04/07
5230
Java入门(2)-- 语言基础
相关推荐
LOL换肤 学习交流
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验