python实现md5算法_MD5算法详述及python实现2 zz

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

结果正确!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值