python使用纯算法实现md5消息摘要算法

本文介绍了如何在Python3中使用纯算法实现MD5消息摘要,包括在标准库hashlib之外的情况,针对非标准MD5算法进行的代码修改。
摘要由CSDN通过智能技术生成

在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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值