设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 4155|回复: 2
收起左侧

易语言SHA1计算模块纯核心库算法源码 - 不调用DLL和其他支持库实现实现字节集SHA1计算

[复制链接]
发表于 2018-10-25 10:00:06 | 显示全部楼层 |阅读模式

  1. .版本 2

  2. .程序集 程序集1

  3. .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码


  4. _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
  5. 返回 (0)  ' 可以根据您的需要返回任意数值

  6. .子程序 _临时子程序

  7. ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
  8. 输出调试文本 (字节集_取SHA1 (到字节集 (“Hello World!”), 真))


  9. .子程序 字节集_取SHA1, 文本型, 公开
  10. .参数 数据, 字节集
  11. .参数 大写, 逻辑型, 可空
  12. .局部变量 容器, 整数型, , "0"
  13. .局部变量 位置, 整数型
  14. .局部变量 字长, 整数型
  15. .局部变量 容器2, 整数型, , "80"
  16. .局部变量 a, 整数型
  17. .局部变量 b, 整数型
  18. .局部变量 c, 整数型
  19. .局部变量 d, 整数型
  20. .局部变量 e, 整数型
  21. .局部变量 成员数, 整数型
  22. .局部变量 旧a, 整数型
  23. .局部变量 旧b, 整数型
  24. .局部变量 旧c, 整数型
  25. .局部变量 旧d, 整数型
  26. .局部变量 旧e, 整数型
  27. .局部变量 位置2, 整数型
  28. .局部变量 t, 整数型
  29. .局部变量 返回, 整数型, , "0"
  30. .局部变量 临时, 整数型

  31. 临时 = 1
  32. 字长 = 取字节集长度 (数据)
  33. 成员数 = 右移 (字长, 2)
  34. 重定义数组 (容器, 假, 0)
  35. .循环判断首 ()
  36.     加入成员 (容器, 大小端转换 (取字节集数据 (数据, 3, 临时)))
  37. .循环判断尾 (临时 ≠ -1)
  38. 字长 = 左移 (字长, 3)
  39. 临时 = 左移 (右移 (字长 + 64, 9), 4) + 16
  40. .如果真 (成员数 < 临时)
  41.     重定义数组 (容器, 真, 临时)
  42. .如果真结束
  43. 容器 [右移 (字长, 5) + 1] = 位或 (容器 [右移 (字长, 5) + 1], 左移 (128, 位与 (24 - 字长, 31)))
  44. 容器 [左移 (右移 (字长 + 64, 9), 4) + 16] = 字长
  45. 成员数 = 取数组成员数 (容器)
  46. a = 1732584193
  47. b = -271733879
  48. c = -1732584194
  49. d = 271733878
  50. e = -1009589776
  51. .变量循环首 (0, 成员数, 16, 位置)
  52.     .如果真 (位置 ≥ 成员数)
  53.         跳出循环 ()
  54.     .如果真结束
  55.     旧a = a
  56.     旧b = b
  57.     旧c = c
  58.     旧d = d
  59.     旧e = e
  60.     .变量循环首 (0, 80, 1, 位置2)
  61.         .如果真 (位置2 ≥ 80)
  62.             跳出循环 ()
  63.         .如果真结束
  64.         .如果 (位置2 < 16)
  65.             容器2 [位置2 + 1] = 容器 [位置 + 位置2 + 1]
  66.         .否则
  67.             容器2 [位置2 + 1] = 循环左移 (位异或 (容器2 [位置2 - 3 + 1], 容器2 [位置2 - 8 + 1], 容器2 [位置2 - 14 + 1], 容器2 [位置2 - 16 + 1]), 1)
  68.         .如果结束
  69.         t = 循环左移 (a, 5) + sha1_ft (位置2, b, c, d) + e + 容器2 [位置2 + 1] + sha1_kt (位置2)
  70.         e = d
  71.         d = c
  72.         c = 循环左移 (b, 30)
  73.         b = a
  74.         a = t

  75.     .变量循环尾 ()
  76.     a = a + 旧a
  77.     b = b + 旧b
  78.     c = c + 旧c
  79.     d = d + 旧d
  80.     e = e + 旧e
  81. .变量循环尾 ()
  82. 重定义数组 (返回, 假, 5)
  83. 返回 [1] = 大小端转换 (a)
  84. 返回 [2] = 大小端转换 (b)
  85. 返回 [3] = 大小端转换 (c)
  86. 返回 [4] = 大小端转换 (d)
  87. 返回 [5] = 大小端转换 (e)
  88. 返回 (字节集到十六进制 (到字节集 (返回), 大写))


  89. .子程序 字节集到十六进制, 文本型
  90. .参数 输入, 字节集
  91. .参数 大写, 逻辑型, 可空
  92. .局部变量 字节集长度, 整数型
  93. .局部变量 返回值, 文本型
  94. .局部变量 计数, 整数型
  95. .局部变量 十六进制文本, 文本型

  96. 字节集长度 = 取字节集长度 (输入)
  97. .如果 (大写)
  98.     十六进制文本 = “0123456789ABCDEF”
  99. .否则
  100.     十六进制文本 = “0123456789abcdef”
  101. .如果结束
  102. .计次循环首 (字节集长度, 计数)
  103.     返回值 = 返回值 + 取文本中间 (十六进制文本, 右移 (输入 [计数], 4) + 1, 1) + 取文本中间 (十六进制文本, 位与 (输入 [计数], 15) + 1, 1)
  104. .计次循环尾 ()
  105. 返回 (返回值)


  106. .子程序 sha1_kt, 整数型
  107. .参数 t, 整数型

  108. .判断开始 (t < 20)
  109.     返回 (1518500249)
  110. .判断 (t < 40)
  111.     返回 (1859775393)
  112. .判断 (t < 60)
  113.     返回 (-1894007588)
  114. .默认
  115.     返回 (-899497514)
  116. .判断结束


  117. .子程序 sha1_ft, 整数型
  118. .参数 t, 整数型
  119. .参数 b, 整数型
  120. .参数 c, 整数型
  121. .参数 d, 整数型

  122. .判断开始 (t < 20)
  123.     返回 (位或 (位与 (b, c), 位与 (位取反 (b), d)))
  124. .判断 (t < 40)
  125.     返回 (位异或 (b, c, d))
  126. .判断 (t < 60)
  127.     返回 (位或 (位与 (b, c), 位与 (b, d), 位与 (c, d)))
  128. .默认

  129. .判断结束
  130. 返回 (位异或 (b, c, d))



  131. .子程序 循环左移, 整数型
  132. .参数 值, 整数型
  133. .参数 位数, 字节型


  134. 置入代码 ({ 139, 69, 8, 138, 77, 12, 211, 192, 201, 194, 8, 0 })
  135. ' mov eax,[ebp+8]
  136. ' mov cl,[ebp+12]
  137. ' rol eax,cl
  138. ' leave
  139. ' retn 8
  140. 返回 (0)

  141. .子程序 大小端转换, 整数型
  142. .参数 整数, 整数型

  143. 置入代码 ({ 139, 69, 8, 134, 196, 193, 192, 16, 134, 196, 201, 194, 4, 0 })
  144. ' mov eax,[ebp+8]
  145. ' xchg al,ah
  146. ' rol eax,16
  147. ' xchg al,ah
  148. ' leave
  149. ' retn 4
  150. 返回 (0)

复制代码

相关帖子

发表于 2018-10-25 18:22:45 | 显示全部楼层
谢谢分享一下
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-26 09:13 , Processed in 1.712098 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表