|
- .版本 2
- .程序集 程序集1
- .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码
- _临时子程序 () ' 在初始化代码执行完毕后调用测试代码
- 返回 (0) ' 可以根据您的需要返回任意数值
- .子程序 _临时子程序
- ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
- 输出调试文本 (字节集_取SHA1 (到字节集 (“Hello World!”), 真))
- .子程序 字节集_取SHA1, 文本型, 公开
- .参数 数据, 字节集
- .参数 大写, 逻辑型, 可空
- .局部变量 容器, 整数型, , "0"
- .局部变量 位置, 整数型
- .局部变量 字长, 整数型
- .局部变量 容器2, 整数型, , "80"
- .局部变量 a, 整数型
- .局部变量 b, 整数型
- .局部变量 c, 整数型
- .局部变量 d, 整数型
- .局部变量 e, 整数型
- .局部变量 成员数, 整数型
- .局部变量 旧a, 整数型
- .局部变量 旧b, 整数型
- .局部变量 旧c, 整数型
- .局部变量 旧d, 整数型
- .局部变量 旧e, 整数型
- .局部变量 位置2, 整数型
- .局部变量 t, 整数型
- .局部变量 返回, 整数型, , "0"
- .局部变量 临时, 整数型
- 临时 = 1
- 字长 = 取字节集长度 (数据)
- 成员数 = 右移 (字长, 2)
- 重定义数组 (容器, 假, 0)
- .循环判断首 ()
- 加入成员 (容器, 大小端转换 (取字节集数据 (数据, 3, 临时)))
- .循环判断尾 (临时 ≠ -1)
- 字长 = 左移 (字长, 3)
- 临时 = 左移 (右移 (字长 + 64, 9), 4) + 16
- .如果真 (成员数 < 临时)
- 重定义数组 (容器, 真, 临时)
- .如果真结束
- 容器 [右移 (字长, 5) + 1] = 位或 (容器 [右移 (字长, 5) + 1], 左移 (128, 位与 (24 - 字长, 31)))
- 容器 [左移 (右移 (字长 + 64, 9), 4) + 16] = 字长
- 成员数 = 取数组成员数 (容器)
- a = 1732584193
- b = -271733879
- c = -1732584194
- d = 271733878
- e = -1009589776
- .变量循环首 (0, 成员数, 16, 位置)
- .如果真 (位置 ≥ 成员数)
- 跳出循环 ()
- .如果真结束
- 旧a = a
- 旧b = b
- 旧c = c
- 旧d = d
- 旧e = e
- .变量循环首 (0, 80, 1, 位置2)
- .如果真 (位置2 ≥ 80)
- 跳出循环 ()
- .如果真结束
- .如果 (位置2 < 16)
- 容器2 [位置2 + 1] = 容器 [位置 + 位置2 + 1]
- .否则
- 容器2 [位置2 + 1] = 循环左移 (位异或 (容器2 [位置2 - 3 + 1], 容器2 [位置2 - 8 + 1], 容器2 [位置2 - 14 + 1], 容器2 [位置2 - 16 + 1]), 1)
- .如果结束
- t = 循环左移 (a, 5) + sha1_ft (位置2, b, c, d) + e + 容器2 [位置2 + 1] + sha1_kt (位置2)
- e = d
- d = c
- c = 循环左移 (b, 30)
- b = a
- a = t
- .变量循环尾 ()
- a = a + 旧a
- b = b + 旧b
- c = c + 旧c
- d = d + 旧d
- e = e + 旧e
- .变量循环尾 ()
- 重定义数组 (返回, 假, 5)
- 返回 [1] = 大小端转换 (a)
- 返回 [2] = 大小端转换 (b)
- 返回 [3] = 大小端转换 (c)
- 返回 [4] = 大小端转换 (d)
- 返回 [5] = 大小端转换 (e)
- 返回 (字节集到十六进制 (到字节集 (返回), 大写))
- .子程序 字节集到十六进制, 文本型
- .参数 输入, 字节集
- .参数 大写, 逻辑型, 可空
- .局部变量 字节集长度, 整数型
- .局部变量 返回值, 文本型
- .局部变量 计数, 整数型
- .局部变量 十六进制文本, 文本型
- 字节集长度 = 取字节集长度 (输入)
- .如果 (大写)
- 十六进制文本 = “0123456789ABCDEF”
- .否则
- 十六进制文本 = “0123456789abcdef”
- .如果结束
- .计次循环首 (字节集长度, 计数)
- 返回值 = 返回值 + 取文本中间 (十六进制文本, 右移 (输入 [计数], 4) + 1, 1) + 取文本中间 (十六进制文本, 位与 (输入 [计数], 15) + 1, 1)
- .计次循环尾 ()
- 返回 (返回值)
- .子程序 sha1_kt, 整数型
- .参数 t, 整数型
- .判断开始 (t < 20)
- 返回 (1518500249)
- .判断 (t < 40)
- 返回 (1859775393)
- .判断 (t < 60)
- 返回 (-1894007588)
- .默认
- 返回 (-899497514)
- .判断结束
- .子程序 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))
- .子程序 循环左移, 整数型
- .参数 值, 整数型
- .参数 位数, 字节型
- 置入代码 ({ 139, 69, 8, 138, 77, 12, 211, 192, 201, 194, 8, 0 })
- ' mov eax,[ebp+8]
- ' mov cl,[ebp+12]
- ' rol eax,cl
- ' leave
- ' retn 8
- 返回 (0)
- .子程序 大小端转换, 整数型
- .参数 整数, 整数型
- 置入代码 ({ 139, 69, 8, 134, 196, 193, 192, 16, 134, 196, 201, 194, 4, 0 })
- ' mov eax,[ebp+8]
- ' xchg al,ah
- ' rol eax,16
- ' xchg al,ah
- ' leave
- ' retn 4
- 返回 (0)
复制代码 |
|