http://blog.csdn.net/adidala/article/details/28677393
虽然,python中已经有MD5模块,但是自己做一下有助加深理解。以下是代码:
# codeing=utf-8
#引入math模块,因为要用到sin函数
importmath
#定义常量,用于初始化128位变量,注意字节顺序,文中的A=0x01234567,这里低值存放低字节,即01 23 45 67,所以运算时A=0x67452301,其他类似。
#这里用字符串的形势,是为了和hex函数的输出统一,hex(10)输出为'0xA',注意结果为字符串。
A = '0x67452301'
B = '0xefcdab89'
C = '0x98badcfe'
D = '0x10325476'
#定义每轮中用到的函数。L为循环左移,注意左移之后可能会超过32位,所以要和0xffffffff做与运算,确保结果为32位。
F = lambdax,y,z:((x&y)|((~x)&z))
G = lambdax,y,z:((x&z)|(y&(~z)))
H = lambdax,y,z:(x^y^z)
I = lambdax,y,z:(y^(x|(~z)))
L = lambdax,n:(((x<>(32-n)))&(0xffffffff))
#定义每轮中循环左移的位数,这里用4个元组表示,用元组是因为速度比列表快。
shi_1 = (7,12,17,22)*4
shi_2 = (5,9,14,20)*4
shi_3 = (4,11,16,23)*4
shi_4 = (6,10,15,21)*4
#定义每轮中用到的M[i]次序。
m_1 = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
m_2 = (1,6,11,0,5,10,15,4,9,14,3,8,13,2,7,12)
m_3 = (5,8,11,14,1,4,7,10,13,0,3,6,9,12,15,2)
m_4 = (0,7,14,5,12,3,10,1,8,15,6,13,4,11,2,9)
#定义函数,用来产生常数T[i],常数有可能超过32位,同样需要&0xffffffff操作。注意返回的是十进制的数。
defT(i):
result = (int(4294967296*abs(math.sin(i))))&0xffffffff
returnresult
#定义函数,用来将列表中的元素循环右移。原因是在每轮操作中,先运算A的值,然后是D,C,B,16轮之后右恢复原来顺序,所以只要每次操作第一个元素即可。
defshift(shift_list):
shift_list = [shift_list[3],shift_list[0],shift_list[1],shift_list[2]]
returnshift_list
#定义主要的函数,参数为当做种子的列表,每轮用到的F,G,H,I,生成的M[],以及循环左移的位数。该函数完成一轮运算。
deffun(fun_list,f,m,shi):
count = 0
globalTi_count
#引入全局变量,T(i)是从1到64循环的。
whilecount<16:
xx = int(fun_list[0],16)+f(int(fun_list[1],16),int(fun_list[2],16),int(fun_list[3],16))+int(m[count],16)+T(Ti_count)
xx = xx&0xffffffff
ll = L(xx,shi[count])
fun_list[0] = hex((int(fun_list[1],16) + ll)&(0xffffffff))[:-1]
#最后的[:-1]是为了去除类似'0x12345678L'最后的'L'
fun_list = shift(fun_list)
count += 1
Ti_count += 1
printfun_list
returnfun_list
#该函数生成每轮需要的M[],最后的参数是为了当有很多分组时,进行偏移。
defgenM16(order,ascii_list,f_offset):
ii = 0
m16 = [0]*16
f_offset = f_offset*64
foriinorder:
i = i*4
m16[ii] = '0x'+''.join((ascii_list[i+f_offset]+ascii_list[i+1+f_offset]+ascii_list[i+2+f_offset]+ascii_list[i+3+f_offset]).split('0x'))
ii += 1
forcinm16:
ind = m16.index(c)
m16[ind] = reverse_hex(c)
returnm16
#翻转十六进制数的顺序:'0x01234567' => '0x67452301'
defreverse_hex(hex_str):
hex_str = hex_str[2:]
hex_str_list = []
foriinrange(0,len(hex_str),2):
hex_str_list.append(hex_str[i:i+2])
hex_str_list.reverse()
hex_str_result = '0x'+''.join(hex_str_list)
returnhex_str_result
#显示结果函数,将最后运算的结果列表进行翻转,合并成字符串的操作。
defshow_result(f_list):
result = ''
f_list1 = [0]*4
foriinf_list:
f_list1[f_list.index(i)] = reverse_hex(i)[2:]
result = result + f_list1[f_list.index(i)]
returnresult
#程序主循环
whileTrue:
abcd_list = [A,B,C,D]
Ti_count = 1
input_m = raw_input('msg>>>')
#对每一个输入先添加一个'0x80',即'10000000'
ascii_list = map(hex,map(ord,input_m))
msg_lenth = len(ascii_list)*8
ascii_list.append('0x80')
#补充0
while(len(ascii_list)*8+64)%512!=0:
ascii_list.append('0x00')
#最后64为存放消息长度,注意长度存放顺序低位在前。
#例如,消息为'a',则长度为'0x0800000000000000'
msg_lenth_0x = hex(msg_lenth)[2:]
msg_lenth_0x = '0x'+ msg_lenth_0x.rjust(16,'0')
msg_lenth_0x_big_order = reverse_hex(msg_lenth_0x)[2:]
msg_lenth_0x_list = []
foriinrange(0,len(msg_lenth_0x_big_order),2):
msg_lenth_0x_list.append('0x'+ msg_lenth_0x_big_order[i:i+2])
ascii_list.extend(msg_lenth_0x_list)
printascii_list
#对每个分组进行4轮运算
foriinrange(0,len(ascii_list)/64):
#将最初128位种子存放在变量中,
aa,bb,cc,dd = abcd_list
#根据顺序产生每轮M[]列表
order_1 = genM16(m_1,ascii_list,i)
order_2 = genM16(m_2,ascii_list,i)
order_3 = genM16(m_3,ascii_list,i)
order_4 = genM16(m_4,ascii_list,i)
#主要四轮运算,注意打印结果列表已经被进行过右移操作!
abcd_list = fun(abcd_list,F,order_1,shi_1)
print'--------------------------------------'
abcd_list = fun(abcd_list,G,order_2,shi_2)
print'--------------------------------------'
abcd_list = fun(abcd_list,H,order_3,shi_3)
print'--------------------------------------'
abcd_list = fun(abcd_list,I,order_4,shi_4)
print'--------------------------------------'
#将最后输出与最初128位种子相加,注意,最初种子不能直接使用abcd_list[0]等,因为abcd_list已经被改变
output_a = hex((int(abcd_list[0],16)+int(aa,16))&0xffffffff)[:-1]
output_b = hex((int(abcd_list[1],16)+int(bb,16))&0xffffffff)[:-1]
output_c = hex((int(abcd_list[2],16)+int(cc,16))&0xffffffff)[:-1]
output_d = hex((int(abcd_list[3],16)+int(dd,16))&0xffffffff)[:-1]
#将输出放到列表中,作为下一次128位种子
abcd_list = [output_a,output_b,output_c,output_d]
#将全局变量Ti_count恢复,一遍开始下一个分组的操作。
Ti_count = 1
#最后调用函数,格式化输出
print'md5>>>'+ show_result(abcd_list)
输入为a,输出为:
['0x61', '0x80', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00',
'0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00',
'0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00',
'0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00',
'0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00',
'0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00',
'0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00',
'0x08', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00',
'0x00']
注意以下结果是已经进行过右移的列表:
即[DABC],[CDAB]...
['0x10325476', '0xa56017f4', '0xefcdab89', '0x98badcfe']
['0x98badcfe', '0xf2d58361', '0xa56017f4', '0xefcdab89']
['0xefcdab89', '0xe65857a7', '0xf2d58361', '0xa56017f4']
['0xa56017f4', '0x607d9686', '0xe65857a7', '0xf2d58361']
['0xf2d58361', '0x3a9d5bcc', '0x607d9686', '0xe65857a7']
['0xe65857a7', '0xe0a07db7', '0x3a9d5bcc', '0x607d9686']
['0x607d9686', '0xd31ddc83', '0xe0a07db7', '0x3a9d5bcc']
['0x3a9d5bcc', '0xa8af6da5', '0xd31ddc83', '0xe0a07db7']
['0xe0a07db7', '0xbe580957', '0xa8af6da5', '0xd31ddc83']
['0xd31ddc83', '0xf386bea6', '0xbe580957', '0xa8af6da5']
['0xa8af6da5', '0xf5fdd933', '0xf386bea6', '0xbe580957']
['0xbe580957', '0x68493d6a', '0xf5fdd933', '0xf386bea6']
['0xf386bea6', '0x44244cf8', '0x68493d6a', '0xf5fdd933']
['0xf5fdd933', '0xd0fe9b27', '0x44244cf8', '0x68493d6a']
['0x68493d6a', '0x6360a45f', '0xd0fe9b27', '0x44244cf8']
['0x44244cf8', '0xf01e3ce2', '0x6360a45f', '0xd0fe9b27']
--------------------------------------
['0xd0fe9b27', '0x9c341767', '0xf01e3ce2', '0x6360a45f']
['0x6360a45f', '0x970ab3a9', '0x9c341767', '0xf01e3ce2']
['0xf01e3ce2', '0xe39ffd23', '0x970ab3a9', '0x9c341767']
['0x9c341767', '0x8d25cc66', '0xe39ffd23', '0x970ab3a9']
['0x970ab3a9', '0x8c444930', '0x8d25cc66', '0xe39ffd23']
['0xe39ffd23', '0x7267097a', '0x8c444930', '0x8d25cc66']
['0x8d25cc66', '0x2dacb8a3', '0x7267097a', '0x8c444930']
['0x8c444930', '0x373beab0', '0x2dacb8a3', '0x7267097a']
['0x7267097a', '0xf175e3ad', '0x373beab0', '0x2dacb8a3']
['0x2dacb8a3', '0x9d5df67e', '0xf175e3ad', '0x373beab0']
['0x373beab0', '0x87b7f475', '0x9d5df67e', '0xf175e3ad']
['0xf175e3ad', '0xc8f891b4', '0x87b7f475', '0x9d5df67e']
['0x9d5df67e', '0x93842e98', '0xc8f891b4', '0x87b7f475']
['0x87b7f475', '0xc7043b64', '0x93842e98', '0xc8f891b4']
['0xc8f891b4', '0x94a2ebee', '0xc7043b64', '0x93842e98']
['0x93842e98', '0x3745961f', '0x94a2ebee', '0xc7043b64']
--------------------------------------
['0xc7043b64', '0xbd607d1e', '0x3745961f', '0x94a2ebee']
['0x94a2ebee', '0xa6f72085', '0xbd607d1e', '0x3745961f']
['0x3745961f', '0xbf8b4f98', '0xa6f72085', '0xbd607d1e']
['0xbd607d1e', '0xdaf7f308', '0xbf8b4f98', '0xa6f72085']
['0xa6f72085', '0x35a82a7a', '0xdaf7f308', '0xbf8b4f98']
['0xbf8b4f98', '0x89e0ec97', '0x35a82a7a', '0xdaf7f308']
['0xdaf7f308', '0x5abe099c', '0x89e0ec97', '0x35a82a7a']
['0x35a82a7a', '0xcf7e60db', '0x5abe099c', '0x89e0ec97']
['0x89e0ec97', '0x75c151e2', '0xcf7e60db', '0x5abe099c']
['0x5abe099c', '0x942e0c86', '0x75c151e2', '0xcf7e60db']
['0xcf7e60db', '0xc0e6ac4', '0x942e0c86', '0x75c151e2']
['0x75c151e2', '0xcc6f5e9e', '0xc0e6ac4', '0x942e0c86']
['0x942e0c86', '0xac50e18', '0xcc6f5e9e', '0xc0e6ac4']
['0xc0e6ac4', '0x79ca7845', '0xac50e18', '0xcc6f5e9e']
['0xcc6f5e9e', '0x8a4a6356', '0x79ca7845', '0xac50e18']
['0xac50e18', '0x918f93bb', '0x8a4a6356', '0x79ca7845']
--------------------------------------
['0x79ca7845', '0xcab8fe42', '0x918f93bb', '0x8a4a6356']
['0x8a4a6356', '0x6a4daeee', '0xcab8fe42', '0x918f93bb']
['0x918f93bb', '0x36269c3f', '0x6a4daeee', '0xcab8fe42']
['0xcab8fe42', '0x1ee405eb', '0x36269c3f', '0x6a4daeee']
['0x6a4daeee', '0x982c7861', '0x1ee405eb', '0x36269c3f']
['0x36269c3f', '0x6812a362', '0x982c7861', '0x1ee405eb']
['0x1ee405eb', '0x71fc7709', '0x6812a362', '0x982c7861']
['0x982c7861', '0x893501c0', '0x71fc7709', '0x6812a362']
['0x6812a362', '0xfebd62fd', '0x893501c0', '0x71fc7709']
['0x71fc7709', '0x28936a74', '0xfebd62fd', '0x893501c0']
['0x893501c0', '0x53e33526', '0x28936a74', '0xfebd62fd']
['0xfebd62fd', '0xaa4d8ae3', '0x53e33526', '0x28936a74']
['0x28936a74', '0x52309e0b', '0xaa4d8ae3', '0x53e33526']
['0x53e33526', '0x50f422f3', '0x52309e0b', '0xaa4d8ae3']
['0xaa4d8ae3', '0x49dee633', '0x50f422f3', '0x52309e0b']
['0x52309e0b', '0xb8e94637', '0x49dee633', '0x50f422f3']
--------------------------------------
md5>>>0cc175b9c0f1b6a831c399e269772661
结果正确。
再来看看2个分组的,输入为:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
输出为:
['0x41', '0x42', '0x43',
'0x44', '0x45', '0x46', '0x47', '0x48', '0x49', '0x4a', '0x4b',
'0x4c', '0x4d', '0x4e', '0x4f', '0x50', '0x51', '0x52', '0x53',
'0x54', '0x55', '0x56', '0x57', '0x58', '0x59', '0x5a', '0x61',
'0x62', '0x63', '0x64', '0x65', '0x66', '0x67', '0x68', '0x69',
'0x6a', '0x6b', '0x6c', '0x6d', '0x6e', '0x6f', '0x70', '0x71',
'0x72', '0x73', '0x74', '0x75', '0x76', '0x77', '0x78', '0x79',
'0x7a', '0x41', '0x42', '0x43', '0x44', '0x45', '0x46', '0x47',
'0x48', '0x49', '0x4a', '0x4b', '0x4c', '0x4d', '0x4e', '0x4f',
'0x50', '0x51', '0x52', '0x53', '0x54', '0x55', '0x56', '0x57',
'0x58', '0x59', '0x5a', '0x61', '0x62', '0x63', '0x64', '0x65',
'0x66', '0x67', '0x68', '0x69', '0x6a', '0x6b', '0x6c', '0x6d',
'0x6e', '0x6f', '0x70', '0x71', '0x72', '0x73', '0x74', '0x75',
'0x76', '0x77', '0x78', '0x79', '0x7a', '0x80', '0x00', '0x00',
'0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00',
'0x00', '0x00', '0x00', '0x00', '0x00', '0x40', '0x03', '0x00',
'0x00', '0x00', '0x00', '0x00',
'0x00']
['0x10325476', '0xc6c10796', '0xefcdab89', '0x98badcfe']
['0x98badcfe', '0x99a09999', '0xc6c10796', '0xefcdab89']
['0xefcdab89', '0x11067980', '0x99a09999', '0xc6c10796']
['0xc6c10796', '0x27bce07a', '0x11067980', '0x99a09999']
['0x99a09999', '0xf22e6c4e', '0x27bce07a', '0x11067980']
['0x11067980', '0xb4ac9218', '0xf22e6c4e', '0x27bce07a']
['0x27bce07a', '0xa95a2fc0', '0xb4ac9218', '0xf22e6c4e']
['0xf22e6c4e', '0xa4799506', '0xa95a2fc0', '0xb4ac9218']
['0xb4ac9218', '0x1eb3e7c1', '0xa4799506', '0xa95a2fc0']
['0xa95a2fc0', '0xa6e70cfe', '0x1eb3e7c1', '0xa4799506']
['0xa4799506', '0xca27520b', '0xa6e70cfe', '0x1eb3e7c1']
['0x1eb3e7c1', '0x8a7612ec', '0xca27520b', '0xa6e70cfe']
['0xa6e70cfe', '0x3cbdcd45', '0x8a7612ec', '0xca27520b']
['0xca27520b', '0xc9efd874', '0x3cbdcd45', '0x8a7612ec']
['0x8a7612ec', '0x17455fbf', '0xc9efd874', '0x3cbdcd45']
['0x3cbdcd45', '0x89d7fc8e', '0x17455fbf', '0xc9efd874']
--------------------------------------
['0xc9efd874', '0xe73b0bf1', '0x89d7fc8e', '0x17455fbf']
['0x17455fbf', '0x325e88e9', '0xe73b0bf1', '0x89d7fc8e']
['0x89d7fc8e', '0x20fd8f8e', '0x325e88e9', '0xe73b0bf1']
['0xe73b0bf1', '0x411c1487', '0x20fd8f8e', '0x325e88e9']
['0x325e88e9', '0x10eb59c9', '0x411c1487', '0x20fd8f8e']
['0x20fd8f8e', '0xb39c39a', '0x10eb59c9', '0x411c1487']
['0x411c1487', '0x8dc25993', '0xb39c39a', '0x10eb59c9']
['0x10eb59c9', '0x70faeaf6', '0x8dc25993', '0xb39c39a']
['0xb39c39a', '0x37a8c09a', '0x70faeaf6', '0x8dc25993']
['0x8dc25993', '0x199217b2', '0x37a8c09a', '0x70faeaf6']
['0x70faeaf6', '0x479a9250', '0x199217b2', '0x37a8c09a']
['0x37a8c09a', '0x3f3d97df', '0x479a9250', '0x199217b2']
['0x199217b2', '0xdc4e0e2f', '0x3f3d97df', '0x479a9250']
['0x479a9250', '0xd46913ec', '0xdc4e0e2f', '0x3f3d97df']
['0x3f3d97df', '0x59c74e62', '0xd46913ec', '0xdc4e0e2f']
['0xdc4e0e2f', '0x25f142e9', '0x59c74e62', '0xd46913ec']
--------------------------------------
['0xd46913ec', '0xf5dd15c6', '0x25f142e9', '0x59c74e62']
['0x59c74e62', '0x723e2047', '0xf5dd15c6', '0x25f142e9']
['0x25f142e9', '0xd9e0033', '0x723e2047', '0xf5dd15c6']
['0xf5dd15c6', '0x84194dae', '0xd9e0033', '0x723e2047']
['0x723e2047', '0x6de4904b', '0x84194dae', '0xd9e0033']
['0xd9e0033', '0xee55001', '0x6de4904b', '0x84194dae']
['0x84194dae', '0x4cbfa1d8', '0xee55001', '0x6de4904b']
['0x6de4904b', '0x5cb22646', '0x4cbfa1d8', '0xee55001']
['0xee55001', '0xf774b565', '0x5cb22646', '0x4cbfa1d8']
['0x4cbfa1d8', '0xede6e8f', '0xf774b565', '0x5cb22646']
['0x5cb22646', '0x2d3485a6', '0xede6e8f', '0xf774b565']
['0xf774b565', '0x2580a2a3', '0x2d3485a6', '0xede6e8f']
['0xede6e8f', '0x87945bd7', '0x2580a2a3', '0x2d3485a6']
['0x2d3485a6', '0x27824bd1', '0x87945bd7', '0x2580a2a3']
['0x2580a2a3', '0x270e6a89', '0x27824bd1', '0x87945bd7']
['0x87945bd7', '0x176d32e7', '0x270e6a89', '0x27824bd1']
--------------------------------------
['0x27824bd1', '0x34946395', '0x176d32e7', '0x270e6a89']
['0x270e6a89', '0xe267d287', '0x34946395', '0x176d32e7']
['0x176d32e7', '0xaaa7cf2d', '0xe267d287', '0x34946395']
['0x34946395', '0x96568b33', '0xaaa7cf2d', '0xe267d287']
['0xe267d287', '0xefc1485', '0x96568b33', '0xaaa7cf2d']
['0xaaa7cf2d', '0xc9b13eb2', '0xefc1485', '0x96568b33']
['0x96568b33', '0x18fb40d9', '0xc9b13eb2', '0xefc1485']
['0xefc1485', '0xab4dce79', '0x18fb40d9', '0xc9b13eb2']
['0xc9b13eb2', '0xdbf0865d', '0xab4dce79', '0x18fb40d9']
['0x18fb40d9', '0x67740c00', '0xdbf0865d', '0xab4dce79']
['0xab4dce79', '0xb484f132', '0x67740c00', '0xdbf0865d']
['0xdbf0865d', '0xb62723d5', '0xb484f132', '0x67740c00']
['0x67740c00', '0x26bda321', '0xb62723d5', '0xb484f132']
['0xb484f132', '0x1ab924f4', '0x26bda321', '0xb62723d5']
['0xb62723d5', '0x51c3f96a', '0x1ab924f4', '0x26bda321']
['0x26bda321', '0xed3e6c31', '0x51c3f96a', '0x1ab924f4']
--------------------------------------
md5>>>22c6028eba170cdd68d67eea6a79eb2a
['0x2aeb796a', '0x3327bf8a', '0xdd0c17ba', '0xea7ed668']
['0xea7ed668', '0x60d773a0', '0x3327bf8a', '0xdd0c17ba']
['0xdd0c17ba', '0xb3bbbab', '0x60d773a0', '0x3327bf8a']
['0x3327bf8a', '0x33880c49', '0xb3bbbab', '0x60d773a0']
['0x60d773a0', '0x67dfaf32', '0x33880c49', '0xb3bbbab']
['0xb3bbbab', '0x73cb5319', '0x67dfaf32', '0x33880c49']
['0x33880c49', '0x6ebe5e61', '0x73cb5319', '0x67dfaf32']
['0x67dfaf32', '0xa1c02162', '0x6ebe5e61', '0x73cb5319']
['0x73cb5319', '0xd2479cbf', '0xa1c02162', '0x6ebe5e61']
['0x6ebe5e61', '0xf2a1af27', '0xd2479cbf', '0xa1c02162']
['0xa1c02162', '0x80943325', '0xf2a1af27', '0xd2479cbf']
['0xd2479cbf', '0xb893ab4f', '0x80943325', '0xf2a1af27']
['0xf2a1af27', '0xfc7e2e4f', '0xb893ab4f', '0x80943325']
['0x80943325', '0xc240c8db', '0xfc7e2e4f', '0xb893ab4f']
['0xb893ab4f', '0xcc5089c', '0xc240c8db', '0xfc7e2e4f']
['0xfc7e2e4f', '0x9fc1b914', '0xcc5089c', '0xc240c8db']
--------------------------------------
['0xc240c8db', '0x56677bee', '0x9fc1b914', '0xcc5089c']
['0xcc5089c', '0xbfaba0fe', '0x56677bee', '0x9fc1b914']
['0x9fc1b914', '0x912665b0', '0xbfaba0fe', '0x56677bee']
['0x56677bee', '0x9cdf9d1b', '0x912665b0', '0xbfaba0fe']
['0xbfaba0fe', '0xed6d6a1', '0x9cdf9d1b', '0x912665b0']
['0x912665b0', '0xadfbd03e', '0xed6d6a1', '0x9cdf9d1b']
['0x9cdf9d1b', '0xb5b6ce67', '0xadfbd03e', '0xed6d6a1']
['0xed6d6a1', '0xee0fdbf3', '0xb5b6ce67', '0xadfbd03e']
['0xadfbd03e', '0xd64f4a1f', '0xee0fdbf3', '0xb5b6ce67']
['0xb5b6ce67', '0x5abd20bd', '0xd64f4a1f', '0xee0fdbf3']
['0xee0fdbf3', '0xe87e3a8b', '0x5abd20bd', '0xd64f4a1f']
['0xd64f4a1f', '0xe8656863', '0xe87e3a8b', '0x5abd20bd']
['0x5abd20bd', '0xfbb31150', '0xe8656863', '0xe87e3a8b']
['0xe87e3a8b', '0x6a89e680', '0xfbb31150', '0xe8656863']
['0xe8656863', '0xf242b5fc', '0x6a89e680', '0xfbb31150']
['0xfbb31150', '0xbe192fa6', '0xf242b5fc', '0x6a89e680']
--------------------------------------
['0x6a89e680', '0x8cac2cde', '0xbe192fa6', '0xf242b5fc']
['0xf242b5fc', '0xd4ebee29', '0x8cac2cde', '0xbe192fa6']
['0xbe192fa6', '0xd95b3468', '0xd4ebee29', '0x8cac2cde']
['0x8cac2cde', '0xa1f9c218', '0xd95b3468', '0xd4ebee29']
['0xd4ebee29', '0xc271dedb', '0xa1f9c218', '0xd95b3468']
['0xd95b3468', '0xdcc8e0eb', '0xc271dedb', '0xa1f9c218']
['0xa1f9c218', '0xc927e2b3', '0xdcc8e0eb', '0xc271dedb']
['0xc271dedb', '0x8ec40ee0', '0xc927e2b3', '0xdcc8e0eb']
['0xdcc8e0eb', '0xf24ab478', '0x8ec40ee0', '0xc927e2b3']
['0xc927e2b3', '0x7c5a2e3', '0xf24ab478', '0x8ec40ee0']
['0x8ec40ee0', '0x8dd21ea6', '0x7c5a2e3', '0xf24ab478']
['0xf24ab478', '0xd48f29f6', '0x8dd21ea6', '0x7c5a2e3']
['0x7c5a2e3', '0x27a857b0', '0xd48f29f6', '0x8dd21ea6']
['0x8dd21ea6', '0xdc959b1c', '0x27a857b0', '0xd48f29f6']
['0xd48f29f6', '0x5d8e7843', '0xdc959b1c', '0x27a857b0']
['0x27a857b0', '0x2d5a9b88', '0x5d8e7843', '0xdc959b1c']
--------------------------------------
['0xdc959b1c', '0xf2ae95ff', '0x2d5a9b88', '0x5d8e7843']
['0x5d8e7843', '0x4f0cfbc6', '0xf2ae95ff', '0x2d5a9b88']
['0x2d5a9b88', '0x53a616d9', '0x4f0cfbc6', '0xf2ae95ff']
['0xf2ae95ff', '0x7c9ac13e', '0x53a616d9', '0x4f0cfbc6']
['0x4f0cfbc6', '0x568bab3f', '0x7c9ac13e', '0x53a616d9']
['0x53a616d9', '0x47be7649', '0x568bab3f', '0x7c9ac13e']
['0x7c9ac13e', '0xb8a4e8ce', '0x47be7649', '0x568bab3f']
['0x568bab3f', '0x358f806d', '0xb8a4e8ce', '0x47be7649']
['0x47be7649', '0xbacf4cfd', '0x358f806d', '0xb8a4e8ce']
['0xb8a4e8ce', '0xabc2313d', '0xbacf4cfd', '0x358f806d']
['0x358f806d', '0x1189bee5', '0xabc2313d', '0xbacf4cfd']
['0xbacf4cfd', '0x2e9a0149', '0x1189bee5', '0xabc2313d']
['0xabc2313d', '0x1e42456a', '0x2e9a0149', '0x1189bee5']
['0x1189bee5', '0xc3e0da51', '0x1e42456a', '0x2e9a0149']
['0x2e9a0149', '0x15aa0b81', '0xc3e0da51', '0x1e42456a']
['0x1e42456a', '0xf8636ab6', '0x15aa0b81', '0xc3e0da51']
--------------------------------------
md5>>>8c0b45ac70826fd5e9e128bb53ccee
结果正确!