设为首页收藏本站帮助中心
查看: 799|回复: 2
收起左侧

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

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

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?加入我们

x

  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 | 显示全部楼层
谢谢分享一下
这个小可爱很神秘,什么都没留下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则