算法纯核心库实现,与 取数据摘要() 计算出的结果不一致就会暂停,算法移植到了易语言,新人可拿去研究。
- .版本 2
- .支持库 dp1
- .程序集 MD5计算模块
- .程序集变量 AA, 整数型
- .程序集变量 BB, 整数型
- .程序集变量 CC, 整数型
- .程序集变量 DD, 整数型
- .子程序 _启动子程序, 整数型
- _临时子程序 ()
- 返回 (0)
- .子程序 _临时子程序
- .局部变量 字节集, 字节集
- .局部变量 系统计算的MD5, 文本型
- .局部变量 本程序计算的MD5, 文本型
- ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
- 置随机数种子 ()
- .计次循环首 (100, )
- 字节集 = 随机字节集 ()
- 系统计算的MD5 = 取数据摘要 (字节集)
- 本程序计算的MD5 = MD5 (字节集)
- .如果真 (系统计算的MD5 ≠ 本程序计算的MD5)
- 暂停 ()
- .如果真结束
- 输出调试文本 (本程序计算的MD5)
- .计次循环尾 ()
- .子程序 随机字节集, 字节集
- .局部变量 长度, 整数型
- .局部变量 返回值, 字节集
- .局部变量 计数, 整数型
- 长度 = 取随机数 (1, 32767)
- 返回值 = 取空白字节集 (长度)
- .计次循环首 (长度, 计数)
- 返回值 [计数] = 取随机数 (0, 255)
- .计次循环尾 ()
- 返回 (返回值)
- .子程序 初始化
- AA = 1732584193
- BB = -271733879
- CC = -1732584194
- DD = 271733878
- .子程序 循环左移, 整数型
- .参数 欲移动的整数, 整数型
- .参数 欲移动的位数, 整数型
- .局部变量 字节集, 字节集
- .局部变量 进位输入, 逻辑型
- .局部变量 进位输出, 逻辑型
- .局部变量 计数, 整数型
- .局部变量 移出的位, 逻辑型
- 字节集 = 到字节集 (欲移动的整数)
- .计次循环首 (欲移动的位数 % 32, )
- 进位输入 = 假
- 移出的位 = 字节集 [4] ≥ 128
- .计次循环首 (4, 计数)
- 进位输出 = 字节集 [计数] ≥ 128
- 字节集 [计数] = 左移 (字节集 [计数], 1) + 到字节 (进位输入)
- 进位输入 = 进位输出
- .计次循环尾 ()
- 字节集 [1] = 字节集 [1] + 到字节 (移出的位)
- .计次循环尾 ()
- 返回 (字节集到整数 (字节集))
- .子程序 F, 整数型
- .参数 X, 整数型
- .参数 Y, 整数型
- .参数 Z, 整数型
- 返回 (位或 (位与 (X, Y), 位与 (位取反 (X), Z)))
- .子程序 G, 整数型
- .参数 X, 整数型
- .参数 Y, 整数型
- .参数 Z, 整数型
- 返回 (位或 (位与 (X, Z), 位与 (Y, 位取反 (Z))))
- .子程序 H, 整数型
- .参数 X, 整数型
- .参数 Y, 整数型
- .参数 Z, 整数型
- 返回 (位异或 (X, Y, Z))
- .子程序 I, 整数型
- .参数 X, 整数型
- .参数 Y, 整数型
- .参数 Z, 整数型
- 返回 (位异或 (Y, 位或 (X, 位取反 (Z))))
- .子程序 FF
- .参数 a, 整数型, 参考
- .参数 b, 整数型
- .参数 c, 整数型
- .参数 d, 整数型
- .参数 Mj, 整数型
- .参数 s, 整数型
- .参数 ti, 整数型
- a = b + 循环左移 (a + F (b, c, d) + Mj + ti, s)
- .子程序 GG
- .参数 a, 整数型, 参考
- .参数 b, 整数型
- .参数 c, 整数型
- .参数 d, 整数型
- .参数 Mj, 整数型
- .参数 s, 整数型
- .参数 ti, 整数型
- a = b + 循环左移 (a + G (b, c, d) + Mj + ti, s)
- .子程序 HH
- .参数 a, 整数型, 参考
- .参数 b, 整数型
- .参数 c, 整数型
- .参数 d, 整数型
- .参数 Mj, 整数型
- .参数 s, 整数型
- .参数 ti, 整数型
- a = b + 循环左移 (a + H (b, c, d) + Mj + ti, s)
- .子程序 II
- .参数 a, 整数型, 参考
- .参数 b, 整数型
- .参数 c, 整数型
- .参数 d, 整数型
- .参数 Mj, 整数型
- .参数 s, 整数型
- .参数 ti, 整数型
- a = b + 循环左移 (a + I (b, c, d) + Mj + ti, s)
- .子程序 主要循环
- .参数 x, 整数型, 数组
- .局部变量 A, 整数型
- .局部变量 B, 整数型
- .局部变量 C, 整数型
- .局部变量 D, 整数型
- A = AA
- B = BB
- C = CC
- D = DD
- FF (A, B, C, D, x [1], 7, -680876936)
- FF (D, A, B, C, x [2], 12, -389564586)
- FF (C, D, A, B, x [3], 17, 606105819)
- FF (B, C, D, A, x [4], 22, -1044525330)
- FF (A, B, C, D, x [5], 7, -176418897)
- FF (D, A, B, C, x [6], 12, 1200080426)
- FF (C, D, A, B, x [7], 17, -1473231341)
- FF (B, C, D, A, x [8], 22, -45705983)
- FF (A, B, C, D, x [9], 7, 1770035416)
- FF (D, A, B, C, x [10], 12, -1958414417)
- FF (C, D, A, B, x [11], 17, -42063)
- FF (B, C, D, A, x [12], 22, -1990404162)
- FF (A, B, C, D, x [13], 7, 1804603682)
- FF (D, A, B, C, x [14], 12, -40341101)
- FF (C, D, A, B, x [15], 17, -1502002290)
- FF (B, C, D, A, x [16], 22, 1236535329)
- GG (A, B, C, D, x [2], 5, -165796510)
- GG (D, A, B, C, x [7], 9, -1069501632)
- GG (C, D, A, B, x [12], 14, 643717713)
- GG (B, C, D, A, x [1], 20, -373897302)
- GG (A, B, C, D, x [6], 5, -701558691)
- GG (D, A, B, C, x [11], 9, 38016083)
- GG (C, D, A, B, x [16], 14, -660478335)
- GG (B, C, D, A, x [5], 20, -405537848)
- GG (A, B, C, D, x [10], 5, 568446438)
- GG (D, A, B, C, x [15], 9, -1019803690)
- GG (C, D, A, B, x [4], 14, -187363961)
- GG (B, C, D, A, x [9], 20, 1163531501)
- GG (A, B, C, D, x [14], 5, -1444681467)
- GG (D, A, B, C, x [3], 9, -51403784)
- GG (C, D, A, B, x [8], 14, 1735328473)
- GG (B, C, D, A, x [13], 20, -1926607734)
- HH (A, B, C, D, x [6], 4, -378558)
- HH (D, A, B, C, x [9], 11, -2022574463)
- HH (C, D, A, B, x [12], 16, 1839030562)
- HH (B, C, D, A, x [15], 23, -35309556)
- HH (A, B, C, D, x [2], 4, -1530992060)
- HH (D, A, B, C, x [5], 11, 1272893353)
- HH (C, D, A, B, x [8], 16, -155497632)
- HH (B, C, D, A, x [11], 23, -1094730640)
- HH (A, B, C, D, x [14], 4, 681279174)
- HH (D, A, B, C, x [1], 11, -358537222)
- HH (C, D, A, B, x [4], 16, -722521979)
- HH (B, C, D, A, x [7], 23, 76029189)
- HH (A, B, C, D, x [10], 4, -640364487)
- HH (D, A, B, C, x [13], 11, -421815835)
- HH (C, D, A, B, x [16], 16, 530742520)
- HH (B, C, D, A, x [3], 23, -995338651)
- II (A, B, C, D, x [1], 6, -198630844)
- II (D, A, B, C, x [8], 10, 1126891415)
- II (C, D, A, B, x [15], 15, -1416354905)
- II (B, C, D, A, x [6], 21, -57434055)
- II (A, B, C, D, x [13], 6, 1700485571)
- II (D, A, B, C, x [4], 10, -1894986606)
- II (C, D, A, B, x [11], 15, -1051523)
- II (B, C, D, A, x [2], 21, -2054922799)
- II (A, B, C, D, x [9], 6, 1873313359)
- II (D, A, B, C, x [16], 10, -30611744)
- II (C, D, A, B, x [7], 15, -1560198380)
- II (B, C, D, A, x [14], 21, 1309151649)
- II (A, B, C, D, x [5], 6, -145523070)
- II (D, A, B, C, x [12], 10, -1120210379)
- II (C, D, A, B, x [3], 15, 718787259)
- II (B, C, D, A, x [10], 21, -343485551)
- AA = AA + A
- BB = BB + B
- CC = CC + C
- DD = DD + D
- .子程序 级联, 文本型
- .参数 值1, 整数型
- .参数 值2, 整数型
- .参数 值3, 整数型
- .参数 值4, 整数型
- .局部变量 数据, 字节集
- .局部变量 计数, 整数型
- .局部变量 十六进制文本, 文本型
- .局部变量 返回值, 文本型
- 数据 = 到字节集 (值1) + 到字节集 (值2) + 到字节集 (值3) + 到字节集 (值4)
- 十六进制文本 = “0123456789abcdef”
- 返回值 = “”
- .计次循环首 (16, 计数)
- 返回值 = 返回值 + 取文本中间 (十六进制文本, 右移 (数据 [计数], 4) + 1, 1) + 取文本中间 (十六进制文本, 位与 (数据 [计数], 15) + 1, 1)
- .计次循环尾 ()
- 返回 (返回值)
- .子程序 字节集到整数, 整数型
- .参数 字节集, 字节集
- 返回 (合并整数 (合并短整数 (到字节 (字节集 [1]), 到字节 (字节集 [2])), 合并短整数 (到字节 (字节集 [3]), 到字节 (字节集 [4]))))
- .子程序 字节集到整数数组
- .参数 数据, 字节集
- .参数 整数, 整数型, 参考 数组
- .局部变量 长度, 整数型
- .局部变量 计数, 整数型
- 长度 = 取字节集长度 (数据)
- 重定义数组 (整数, 假, 0)
- .变量循环首 (0, 长度 - 1, 4, 计数)
- 加入成员 (整数, 字节集到整数 (取字节集中间 (数据, 计数 + 1, 4)))
- .变量循环尾 ()
- .子程序 填充, 字节集
- .参数 填充的数据, 字节集
- .局部变量 位长, 长整数型
- 位长 = 取字节集长度 (填充的数据) × 8
- 填充的数据 = 填充的数据 + { 128 }
- .判断循环首 (取字节集长度 (填充的数据) % 64 ≠ 56)
- 填充的数据 = 填充的数据 + { 0 }
- .判断循环尾 ()
- 填充的数据 = 填充的数据 + 到字节集 (位长)
- 返回 (填充的数据)
- .子程序 MD5, 文本型, 公开
- .参数 字节集数据, 字节集
- .局部变量 字节集, 字节集
- .局部变量 整数分组数组, 整数型, , "0"
- .局部变量 计数, 整数型
- 初始化 ()
- 字节集 = 字节集数据
- 字节集 = 填充 (字节集)
- .变量循环首 (1, 取字节集长度 (字节集), 64, 计数)
- 字节集到整数数组 (取字节集中间 (字节集, 计数, 64), 整数分组数组)
- 主要循环 (整数分组数组)
- .变量循环尾 ()
- 返回 (级联 (AA, BB, CC, DD))
复制代码 |