在python3中需要就是字节的md5,可以直接导入hashlib库进行计算,但是如果目标网站使用的是非标准的md5算法,这时候就要修改部分代码,下面知直接使用纯算法完成md5计算
import hashlib
def unsignright(i, q):
i = bin(i)[2:]
while len(i) < 32:
i = '0' + i
i = i[-32:]
if q != 0:
i = i[:q * -1]
i = int(i, 2)
return i
def convertToWordArray(data):
lMessageLength = len(data)
lNumberOfWordsTempOne = lMessageLength + 8
lNumberOfWordsTempTwo = lNumberOfWordsTempOne // 64
lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16
lWordArray = [0 for i in range(lNumberOfWords)]
lByteCount = 0
while lByteCount < lMessageLength:
lWordCount = lByteCount // 4
lBytePosition = (lByteCount % 4) * 8
lWordArray[lWordCount] = (lWordArray[lWordCount] | (data[lByteCount] << lBytePosition))
lByteCount += 1
lWordCount = lByteCount // 4
lBytePosition = (lByteCount % 4) * 8
lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition)
lWordArray[lNumberOfWords - 2] = lMessageLength << 3
lWordArray[lNumberOfWords - 1] = unsignright(lMessageLength, 29)
return lWordArray
def rotateLeft (lValue, iShiftBits):
return (lValue << iShiftBits) | (unsignright(lValue, (32 - iShiftBits)))
def addUnsigned(lX, lY):
lX8 = (lX & 0x80000000)
lY8 = (lY & 0x80000000)
lX4 = (lX & 0x40000000)
lY4 = (lY & 0x40000000)
lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF)
if lX4 & lY4:
return lResult ^ 0x80000000 ^ lX8 ^ lY8
if lX4 | lY4:
if lResult & 0x40000000:
return lResult ^ 0xC0000000 ^ lX8 ^ lY8
else:
return lResult ^ 0x40000000 ^ lX8 ^ lY8
else:
return (lResult ^ lX8 ^ lY8)
def F(x, y, z):
return (x & y) | ((~ x) & z)
def G(x, y, z):
return (x & z) | (y & (~ z))
def H (x, y, z):
return (x ^ y ^ z)
def I(x, y, z