- 性别
- 保密
- 积分
- 6
- 积分
- 8
- 精华
- 0
- 阅读权限
- 10
- 注册时间
- 2012-5-21
- 最后登录
- 2012-5-22
- 帖子
- 2
- 性别
- 保密
|
本帖最后由 sky_yx 于 2015-12-30 14:21 编辑
.版本 2
.程序集 窗口程序集1
.程序集变量 c_整数, 整数型, , "4"
.版本 2
.子程序 加密, 文本型, 公开, 进行MD5加密运算,不可逆的加密算法(返回加密后的密文)
.参数 字节集, 字节集, , 欲进行MD5加密处理的字节集
.局部变量 信息, 整数型, , "16"
.局部变量 长度, 整数型
.局部变量 位置, 整数型
.局部变量 补充, 整数型
.局部变量 变量, 整数型
.局部变量 A, 整数型
.局部变量 B, 整数型
.局部变量 C, 整数型
.局部变量 D, 整数型
.局部变量 小a, 整数型
.局部变量 小b, 整数型
.局部变量 小c, 整数型
.局部变量 小d, 整数型
' 因为易语言中整数的位形式与C中有所不同,故链接常量值也需要进行改变
' 也可能是搞错了,易语言中整数的位形式还不了解,参考了一些VBScript之后才将顺序颠倒
A = 1732584193
B = 4023233417
C = 2562383102
D = 271733878
' 置取MD5值的起点,如果要修改此处的值,请自行修改后面的代码,这里仅仅起标志作用
位置 = 1
' MD5的字节补足算法,原理上是可以处理任意位数的数据,这里做了简化,数据位数必须是8的整数倍,即数据必须是整数个字节,这也是为什么后面长度要乘以8,且字节集长度不能大于268435456(这还与易语言中整数的位形式有关),同时对于一个较大的字节集这样处理效率是低下的。
长度 = 取字节集长度 (字节集)
.如果真 (长度 ≥ 268435456) ' 256M,普通应用是足够了
返回 (“”)
.如果真结束
补充 = 长度 % 64
.如果 (补充 ≤ 56)
补充 = 56 - 补充
.否则
补充 = 120 - 补充
.如果结束
长度 = 长度 × 8
' 用位操作来取比同余可能更快一些
.如果真 (补充 > 0)
字节集 = 字节集 + { 128 } + 取空白字节集 (补充 - 1)
.如果真结束
字节集 = 字节集 + 到字节集 (长度) + { 0, 0, 0, 0 }
' 对补充后的字节集作信息摘要
.判断循环首 (位置 ≠ -1)
.变量循环首 (1, 16, 1, 变量)
信息 [变量] = 取字节集数据 (字节集, #整数型, 位置)
.变量循环尾 ()
小a = A
小b = B
小c = C
小d = D
轮函数 (小a, 小b, 小c, 小d, 信息)
A = 正加法 (A, 小a)
B = 正加法 (B, 小b)
C = 正加法 (C, 小c)
D = 正加法 (D, 小d)
.判断循环尾 ()
编辑框2.内容 = 编辑框2.内容 + 到文本 (c_整数 [1] - A) + “ ” + 到文本 (c_整数 [1] - A) + “ ” + 到文本 (c_整数 [1] - A) + “ ” + 到文本 (c_整数 [1] - A) + #换行符
c_整数 [1] = A
c_整数 [2] = B
c_整数 [3] = C
c_整数 [4] = D
返回 (十六转换 (A) + 十六转换 (B) + 十六转换 (C) + 十六转换 (D))
.子程序 十六转换, 文本型
.参数 参数, 整数型
.局部变量 z1, 字节集
.局部变量 z2, 字节集
.局部变量 n1, 整数型
z1 = 到字节集 (参数)
z2 = 取字节集右边 (z1, 1) + 取字节集中间 (z1, 3, 1) + 取字节集中间 (z1, 2, 1) + 取字节集左边 (z1, 1)
n1 = 取字节集数据 (z2, 3, 1)
返回 (取重复文本 (8 - 取文本长度 (取十六进制文本 (n1)), “0”) + 取十六进制文本 (n1))
.子程序 正加法, 整数型, 公开
.参数 X, 整数型
.参数 Y, 整数型
.局部变量 低, 整数型
.局部变量 高, 整数型
' 易语言中没有正整数型,所以加法只能用这种形式代替
高 = 右移 (X, 16) + 右移 (Y, 16)
低 = 位与 (X, 65535) + 位与 (Y, 65535)
返回 (合并整数 (低, 高 + 右移 (低, 16)))
.子程序 循移, 整数型, 公开
.参数 n1, 整数型
.参数 n2, 整数型
' MD5中的左移是循环左移
返回 (位或 (左移 (n1, n2), 位与 (右移 (n1, 32 - n2), 求次方 (2, n2) - 1)))
.子程序 FF, , 公开
.参数 A, 整数型, 参考
.参数 B, 整数型
.参数 C, 整数型
.参数 D, 整数型
.参数 信息, 整数型
.参数 n1, 整数型
.参数 轮数, 整数型
A = 正加法 (A, 正加法 (正加法 (位或 (位与 (B, C), 位与 (位取反 (B), D)), 信息), 轮数))
A = 循移 (A, n1)
A = 正加法 (A, B)
.子程序 GG, , 公开
.参数 A, 整数型, 参考
.参数 B, 整数型
.参数 C, 整数型
.参数 D, 整数型
.参数 信息, 整数型
.参数 n1, 整数型
.参数 轮数, 整数型
A = 正加法 (A, 正加法 (正加法 (位或 (位与 (B, D), 位与 (C, 位取反 (D))), 信息), 轮数))
A = 循移 (A, n1)
A = 正加法 (A, B)
.子程序 HH, , 公开
.参数 A, 整数型, 参考
.参数 B, 整数型
.参数 C, 整数型
.参数 D, 整数型
.参数 信息, 整数型
.参数 n1, 整数型
.参数 轮数, 整数型
A = 正加法 (A, 正加法 (正加法 (位异或 (B, C, D), 信息), 轮数))
A = 循移 (A, n1)
A = 正加法 (A, B)
.子程序 II, , 公开
.参数 A, 整数型, 参考
.参数 B, 整数型
.参数 C, 整数型
.参数 D, 整数型
.参数 信息, 整数型
.参数 n1, 整数型
.参数 轮数, 整数型
A = 正加法 (A, 正加法 (正加法 (位异或 (C, 位或 (B, 位取反 (D))), 信息), 轮数))
A = 循移 (A, n1)
A = 正加法 (A, B)
.子程序 轮函数, , 公开
.参数 A, 整数型, 参考
.参数 B, 整数型, 参考
.参数 C, 整数型, 参考
.参数 D, 整数型, 参考
.参数 信息, 整数型, 数组
' 轮参数为 4294967296 × 取绝对值 (求正弦 (轮次))的整数部分 轮次为1->64
' Round F
FF (A, B, C, D, 信息 [1], 7, 3614090360) ' 0xd76aa478
FF (D, A, B, C, 信息 [2], 12, 3905402710) ' 0xe8c7b756
FF (C, D, A, B, 信息 [3], 17, 606105819) ' 0x242070db
FF (B, C, D, A, 信息 [4], 22, 3250441966) ' 0xc1bdceee
FF (A, B, C, D, 信息 [5], 7, 4118548399) ' 0xf57c0faf
FF (D, A, B, C, 信息 [6], 12, 1200080426) ' 0x4787c62a
FF (C, D, A, B, 信息 [7], 17, 2821735955) ' 0xa8304613
FF (B, C, D, A, 信息 [8], 22, 4249261313) ' 0xfd469501
FF (A, B, C, D, 信息 [9], 7, 1770035416) ' 0x698098d8
FF (D, A, B, C, 信息 [10], 12, 2336552879) ' 0x8b44f7af
FF (C, D, A, B, 信息 [11], 17, 4294925233) ' 0xffff5bb1
FF (B, C, D, A, 信息 [12], 22, 2304563134) ' 0x895cd7be
FF (A, B, C, D, 信息 [13], 7, 1804603682) ' 0x6b901122
FF (D, A, B, C, 信息 [14], 12, 4254626195) ' 0xfd987193
FF (C, D, A, B, 信息 [15], 17, 2792965006) ' 0xa679438e
FF (B, C, D, A, 信息 [16], 22, 1236535329) ' 0x49b40821
' Round G
GG (A, B, C, D, 信息 [2], 5, 4129170786) ' 0xF61E2562
GG (D, A, B, C, 信息 [7], 9, 3225465664) ' 0xC040B340
GG (C, D, A, B, 信息 [12], 14, 643717713) ' 0x265E5A51
GG (B, C, D, A, 信息 [1], 20, 3921069994) ' 0xE9B6C7AA
GG (A, B, C, D, 信息 [6], 5, 3593408605) ' 0xD62F105D
GG (D, A, B, C, 信息 [11], 9, 38016083) ' 0x2441453
GG (C, D, A, B, 信息 [16], 14, 3634488961) ' 0xD8A1E681
GG (B, C, D, A, 信息 [5], 20, 3889429448) ' 0xE7D3FBC8
GG (A, B, C, D, 信息 [10], 5, 568446438) ' 0x21E1CDE6
GG (D, A, B, C, 信息 [15], 9, 3275163606) ' 0xC33707D6
GG (C, D, A, B, 信息 [4], 14, 4107603335) ' 0xF4D50D87
GG (B, C, D, A, 信息 [9], 20, 1163531501) ' 0x455A14ED
GG (A, B, C, D, 信息 [14], 5, 2850285829) ' 0xA9E3E905
GG (D, A, B, C, 信息 [3], 9, 4243563512) ' 0xFCEFA3F8
GG (C, D, A, B, 信息 [8], 14, 1735328473) ' 0x676F02D9
GG (B, C, D, A, 信息 [13], 20, 2368359562) ' 0x8D2A4C8A
' Round H
HH (A, B, C, D, 信息 [6], 4, 4294588738) ' 0xFFFA3942
HH (D, A, B, C, 信息 [9], 11, 2272392833) ' 0x8771F681
HH (C, D, A, B, 信息 [12], 16, 1839030562) ' 0x6D9D6122
HH (B, C, D, A, 信息 [15], 23, 4259657740) ' 0xFDE5380C
HH (A, B, C, D, 信息 [2], 4, 2763975236) ' 0xA4BEEA44
HH (D, A, B, C, 信息 [5], 11, 1272893353) ' 0x4BDECFA9
HH (C, D, A, B, 信息 [8], 16, 4139469664) ' 0xF6BB4B60
HH (B, C, D, A, 信息 [11], 23, 3200236656) ' 0xBEBFBC70
HH (A, B, C, D, 信息 [14], 4, 681279174) ' 0x289B7EC6
HH (D, A, B, C, 信息 [1], 11, 3936430074) ' 0xEAA127FA
HH (C, D, A, B, 信息 [4], 16, 3572445317) ' 0xD4EF3085
HH (B, C, D, A, 信息 [7], 23, 76029189) ' 0x4881D05
HH (A, B, C, D, 信息 [10], 4, 3654602809) ' 0xD9D4D039
HH (D, A, B, C, 信息 [13], 11, 3873151461) ' 0xE6DB99E5
HH (C, D, A, B, 信息 [16], 16, 530742520) ' 0x1FA27CF8
HH (B, C, D, A, 信息 [3], 23, 3299628645) ' 0xC4AC5665
' Round I
II (A, B, C, D, 信息 [1], 6, 4096336452) ' 0xF4292244
II (D, A, B, C, 信息 [8], 10, 1126891415) ' 0x432AFF97
II (C, D, A, B, 信息 [15], 15, 2878612391) ' 0xAB9423A7
II (B, C, D, A, 信息 [6], 21, 4237533241) ' 0xFC93A039
II (A, B, C, D, 信息 [13], 6, 1700485571) ' 0x655B59C3
II (D, A, B, C, 信息 [4], 10, 2399980690) ' 0x8F0CCC92
II (C, D, A, B, 信息 [11], 15, 4293915773) ' 0xFFEFF47D
II (B, C, D, A, 信息 [2], 21, 2240044497) ' 0x85845DD1
II (A, B, C, D, 信息 [9], 6, 1873313359) ' 0x6FA87E4F
II (D, A, B, C, 信息 [16], 10, 4264355552) ' 0xFE2CE6E0
II (C, D, A, B, 信息 [7], 15, 2734768916) ' 0xA3014314
II (B, C, D, A, 信息 [14], 21, 1309151649) ' 0x4E0811A1
II (A, B, C, D, 信息 [5], 6, 4149444226) ' 0xF7537E82
II (D, A, B, C, 信息 [12], 10, 3174756917) ' 0xBD3AF235
II (C, D, A, B, 信息 [3], 15, 718787259) ' 0x2AD7D2BB
II (B, C, D, A, 信息 [10], 21, 3951481745) ' 0xEB86D391
|
|