|
本帖最后由 CNWTEPRG 于 2021-1-20 10:05 编辑
- .版本 2
- .程序集 程序集1
- .子程序 _启动子程序, 整数型
- _临时子程序 ()
- 返回 (0)
- .子程序 _临时子程序
- .局部变量 字节集, 字节集
- .局部变量 长度, 整数型
- .局部变量 PHP结果, 文本型
- .局部变量 易结果, 文本型
- 置随机数种子 ()
- .计次循环首 (1024, 长度)
- 字节集 = 取随机字节集 (长度)
- PHP结果 = PHP_SHA256 (字节集)
- 易结果 = 取数据SHA256特征码 (字节集)
- .如果 (PHP结果 = 易结果)
- 输出调试文本 (易结果 + “ 正确” + 到文本 (长度))
- .否则
- 输出调试文本 (“错误”)
- 暂停 ()
- .如果结束
- .计次循环尾 ()
- .子程序 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)
- .子程序 sha256_S, 整数型
- .参数 X, 整数型
- .参数 n, 整数型
- 返回 (位或 (逻辑右移 (X, n), 左移 (X, 32 - n)))
- .子程序 sha256_R, 整数型
- .参数 X, 整数型
- .参数 n, 整数型
- 返回 (逻辑右移 (X, n))
- .子程序 sha256_Ch, 整数型
- .参数 x, 整数型
- .参数 y, 整数型
- .参数 z, 整数型
- 返回 (位异或 (位与 (x, y), 位与 (位取反 (x), z)))
- .子程序 sha256_Maj, 整数型
- .参数 x, 整数型
- .参数 y, 整数型
- .参数 z, 整数型
- 返回 (位异或 (位与 (x, y), 位与 (x, z), 位与 (y, z)))
- .子程序 sha256_Sigma0256, 整数型
- .参数 x, 整数型
- 返回 (位异或 (sha256_S (x, 2), sha256_S (x, 13), sha256_S (x, 22)))
- .子程序 sha256_Sigma1256, 整数型
- .参数 x, 整数型
- 返回 (位异或 (sha256_S (x, 6), sha256_S (x, 11), sha256_S (x, 25)))
- .子程序 sha256_Gamma0256, 整数型
- .参数 x, 整数型
- 返回 (位异或 (sha256_S (x, 7), sha256_S (x, 18), sha256_R (x, 3)))
- .子程序 sha256_Gamma1256, 整数型
- .参数 x, 整数型
- 返回 (位异或 (sha256_S (x, 17), sha256_S (x, 19), sha256_R (x, 10)))
- .子程序 binb_sha256
- .参数 输入数据, 整数型, 数组
- .参数 位数, 整数型
- .参数 计算结果, 整数型, 参考 数组
- .局部变量 sha256_K, 整数型, , "0"
- .局部变量 HASH, 整数型, , "0"
- .局部变量 W, 整数型, , "64"
- .局部变量 a, 整数型
- .局部变量 b, 整数型
- .局部变量 c, 整数型
- .局部变量 d, 整数型
- .局部变量 e, 整数型
- .局部变量 f, 整数型
- .局部变量 g, 整数型
- .局部变量 h, 整数型
- .局部变量 i, 整数型
- .局部变量 j, 整数型
- .局部变量 T1, 整数型
- .局部变量 T2, 整数型
- .局部变量 tmp, 整数型
- .局部变量 成员数, 整数型
- sha256_K = { 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987, 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998 }
- HASH = { 1779033703, -1150833019, 1013904242, -1521486534, 1359893119, -1694144372, 528734635, 1541459225 }
- tmp = 左移 (右移 (位数 + 64, 9), 4) + 16
- 成员数 = 取数组成员数 (输入数据)
- .如果真 (成员数 < tmp)
- 重定义数组 (输入数据, 真, tmp)
- .如果真结束
- 输入数据 [右移 (位数, 5) + 1] = 位或 (输入数据 [右移 (位数, 5) + 1], 左移 (128, 24 - 位数 % 32))
- 输入数据 [tmp] = 位数
- 成员数 = 取数组成员数 (输入数据)
- .变量循环首 (0, 成员数, 16, i)
- .如果真 (i ≥ 成员数)
- 跳出循环 ()
- .如果真结束
- a = HASH [1]
- b = HASH [2]
- c = HASH [3]
- d = HASH [4]
- e = HASH [5]
- f = HASH [6]
- g = HASH [7]
- h = HASH [8]
- .变量循环首 (0, 64, 1, j)
- .如果真 (j ≥ 64)
- 跳出循环 ()
- .如果真结束
- .如果 (j < 16)
- W [j + 1] = 输入数据 [j + i + 1]
- .否则
- W [j + 1] = safe_add (safe_add (safe_add (sha256_Gamma1256 (W [j - 2 + 1]), W [j - 7 + 1]), sha256_Gamma0256 (W [j - 15 + 1])), W [j - 16 + 1])
- .如果结束
- T1 = safe_add (safe_add (safe_add (safe_add (h, sha256_Sigma1256 (e)), sha256_Ch (e, f, g)), sha256_K [j + 1]), W [j + 1])
- T2 = safe_add (sha256_Sigma0256 (a), sha256_Maj (a, b, c))
- h = g
- g = f
- f = e
- e = safe_add (d, T1)
- d = c
- c = b
- b = a
- a = safe_add (T1, T2)
- .变量循环尾 ()
- HASH [1] = safe_add (a, HASH [1])
- HASH [2] = safe_add (b, HASH [2])
- HASH [3] = safe_add (c, HASH [3])
- HASH [4] = safe_add (d, HASH [4])
- HASH [5] = safe_add (e, HASH [5])
- HASH [6] = safe_add (f, HASH [6])
- HASH [7] = safe_add (g, HASH [7])
- HASH [8] = safe_add (h, HASH [8])
- .变量循环尾 ()
- 计算结果 = HASH
- .子程序 取数据SHA256特征码_字节集, 字节集, 公开, 此函数返回SHA256的字节集裸数据,不会转换成16进制
- .参数 字节集数据, 字节集, , 为命令提供所需的字节集数据。
- .局部变量 输入数据, 整数型, , "0"
- .局部变量 计算结果, 整数型, , "0", 固定32字节(8成员)
- 字节集到整数型数组 (字节集数据, 输入数据)
- binb_sha256 (输入数据, 左移 (取字节集长度 (字节集数据), 3), 计算结果)
- 返回 (整数型数组到字节集 (计算结果))
- .子程序 逻辑右移, 整数型
- .参数 欲移动的整数, 整数型
- .参数 欲被移动的位数, 字节型
- 置入代码 ({ 81, 139, 69, 8, 138, 77, 12, 211, 232, 89, 139, 229, 93, 194, 8, 0 })
- 返回 (-1)
- .子程序 字节集到整数型数组
- .参数 输入, 字节集
- .参数 输出, 整数型, 数组
- .局部变量 索引, 整数型
- .局部变量 成员数, 整数型
- 清除数组 (输出)
- 索引 = 1
- .循环判断首 ()
- 加入成员 (输出, 反转整数字节序 (取字节集数据 (输入, #整数型, 索引)))
- .循环判断尾 (索引 ≠ -1)
- .子程序 整数型数组到字节集, 字节集
- .参数 输入, 整数型, 数组
- .局部变量 成员数, 整数型
- .局部变量 计数, 整数型
- .局部变量 数组副本, 整数型, , "0"
- 成员数 = 取数组成员数 (输入)
- 重定义数组 (数组副本, 假, 成员数)
- .计次循环首 (成员数, 计数)
- 数组副本 [计数] = 反转整数字节序 (输入 [计数])
- .计次循环尾 ()
- 返回 (到字节集 (数组副本))
- .子程序 字节集到十六进制文本, 文本型
- .参数 input, 字节集
- .局部变量 hex_tab, 字节集
- .局部变量 output, 字节集
- .局部变量 length, 整数型
- .局部变量 i, 整数型
- .局部变量 x, 整数型
- hex_tab = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102 }
- length = 取字节集长度 (input)
- .变量循环首 (0, length, 1, i)
- .如果真 (i ≥ length)
- 跳出循环 ()
- .如果真结束
- x = input [i + 1]
- output = output + 到字节集 (hex_tab [位与 (逻辑右移 (x, 4), 15) + 1]) + 到字节集 (hex_tab [位与 (x, 15) + 1])
- .变量循环尾 ()
- 返回 (到文本 (output))
- .子程序 取数据SHA256特征码, 文本型, 公开, 返回一段字节集数据的SHA256数据摘要编码文本。不同数据的SHA256码都不一样,因此本命令可以用作保证重要数据不会被篡改。
- .参数 字节集数据, 字节集, , 为命令提供所需的字节集数据。
- 返回 (字节集到十六进制文本 (取数据SHA256特征码_字节集 (字节集数据)))
- .子程序 PHP_SHA256, 文本型, , 调用PHP进行SHA256计算
- .参数 数据, 字节集
- .局部变量 PHP路径, 文本型
- .局部变量 计算结果, 文本型
- PHP路径 = “D:\Server\php-7.3.1-Win32-VC15-x64\php.exe”
- .如果真 (文件是否存在 (“sha256.php”) = 假)
- 写到文件 (“sha256.php”, 到字节集 (“<?php exit(hash('sha256',hex2bin($argv[1]))); ?>”))
- .如果真结束
- .如果真 (运行控制台程序 (PHP路径 + “ sha256.php ” + 字节集到十六进制文本 (数据), 计算结果, , ) = 假)
- 信息框 (“运行失败: ” + PHP路径 + “ 请确定PHP是否已安装。”, 16, , )
- 结束 ()
- .如果真结束
- 返回 (计算结果)
- .子程序 取随机字节集, 字节集
- .参数 长度, 整数型
- .局部变量 返回值, 字节集
- .局部变量 计数, 整数型
- 返回值 = 取空白字节集 (长度)
- .计次循环首 (长度, 计数)
- 返回值 [计数] = 取随机数 (, )
- .计次循环尾 ()
- 返回 (返回值)
复制代码 |
|