【问题标题】:Calculating MD5 of Hex in Python在 Python 中计算 Hex 的 MD5
【发布时间】:2014-03-24 05:38:54
【问题描述】:

我总是在解密 RC4 加密对象时失败。我的密钥必须是这个十六进制字符串的 MD5-Hash:

00 00 00 01 3e 2a 5b 71 00 00 03 a0

我尝试将该十六进制字符串转换为 ascii,然后计算它的 MD5 哈希,但似乎我的密钥总是错误的。我认为有一个问题,因为一些十六进制值是控制字符,但是计算这个十六进制字符串的 MD5 的正确方法是什么?我想到的是这样的:

from Crypto.Cipher import ARC4
from Crypto.Hash import MD5


def hexToAscii(hex_string):
    return ''.join([chr(int(''.join(c), 16)) for c in zip(hex_string[0::2],hex_string[1::2])])

def main():
    hex_string = '000000013e2a5b71000003a0'

    # Key for Decryption
    myKey = MD5.new(hexToAscii(hex_string)).hexdigest()

    print 'hexToAscii(hex_string): %s' % hexToAscii(hex_string)

    #open('myfile','wb').write(ARC4.new(hexToAscii(myKey)).decrypt(hexToAscii(CIPHER_TEXT)))

if __name__ == '__main__':
    main()

【问题讨论】:

    标签: python encryption hash md5


    【解决方案1】:

    main 函数打印 hexToAscii(hex_string) 而不是 myKey

    顺便说一句,您最好使用binascii.unhexlify 而不是hexToAscii。并且可以使用hashlib module来计算md5。

    >>> import hashlib
    >>> import binascii
    >>> hex_string = '000000013e2a5b71000003a0'
    >>> hashlib.md5(binascii.unhexlify(hex_string)).hexdigest()
    '6afebf522c531575e96d6814be816c7c'
    

    【讨论】:

    • 是的,我故意想在 main 中打印 hexToAscii(hex_string),因为我认为计算控制字符转换为“???”的 ascii 的 md5 可能会有问题。我只是想看看这个 hex_string 的 ascii 输出会是什么。因为当我转换该 hex_string 时,我得到 ">*[q�" 并从中计算 md5 并将其用作我的密钥来解密我的 RC4 对象仍然给我一个损坏的输出。但我认为密钥必须是正确的,解密的问题可能在其他地方。
    • @Caffeine,要写入文件的结果是什么? (CIPHER_TEXT 的值是什么?)
    • ARC4 解密密文的结果。所以这个: open('output.dll','wb').write(ARC4.new(key).decrypt(binascii.unhexlify(Cipher_Text))) 其中密钥应该是你上面计算的md5。我这样做了,但总是得到一个损坏的 dll 文件,所以我认为计算 ">*[q�" 的 md5 将是原因?
    • @Caffeine,CIPHER_TEXT 的值是多少?
    • @Caffeine,如果您提供正确的原始dll 和加密的dll,那就太好了。
    【解决方案2】:

    使用 Python 标准库中的 hashlibbinascii,不涉及转换为 ASCII:

    import binascii
    import hashlib
    
    base = binascii.unhexlify("000000013e2a5b71000003a0")
    key = hashlib.md5(base).digest()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2015-09-18
      相关资源
      最近更新 更多