Python3:用hashlib替换md5

时间:2017-05-11 08:57:26

标签: python-3.x md5 hashlib

我正在尝试使用Python3的事件API。在当前状态下,登录功能使用不推荐使用的md5库。因此,我想将此函数转换为Python 3兼容。我遇到困难的路线是:

response = md5.new(nonce + ':'+ md5.new(password).hexdigest()).hexdigest()

我尝试将其转换为

    mpwd = hashlib.md5(password.encode())
    apwd = mpwd.hexdigest()
    s = nonce+":"+apwd
    mall = hashlib.md5(s.encode())
    response = mall.hexdigest()

不幸的是,API会返回一个错误,指出登录名或密码不正确。但是,我检查了两个,没关系。那么请你告诉我我的代码有什么问题吗?

2 个答案:

答案 0 :(得分:1)

以下是您在发布之前应该尝试过的内容:

Python 2.7:

>>> import md5
>>> password = 'fred'
>>> nonce = '12345'
>>> md5.new(nonce + ':'+ md5.new(password).hexdigest()).hexdigest()
'496a1ca20abf5b0b12ab7f9891d04201'

Python 2.7和Python 3.6:

>>> import hashlib
>>> password = 'fred'
>>> nonce = '12345'
>>> mpwd = hashlib.md5(password.encode())
>>> apwd = mpwd.hexdigest()
>>> s = nonce+":"+apwd
>>> mall = hashlib.md5(s.encode())
>>> mall.hexdigest()
'496a1ca20abf5b0b12ab7f9891d04201'

如您所见,两个版本都生成相同的md5哈希值。所以问题不在于您的代码。它可能与您在此代码之后使用response所做的事情有关。或者API可能是正确的,登录确实是错误的。

答案 1 :(得分:-1)

您的代码是正确的。 如果你在md5之前添加hashlib并在导入md5之前加上“#”,问题就会解决。

导入hashlib (从文件中删除“import md5”)

def login(self, user, password):
    "Login to the Eventful API as USER with PASSWORD."
    nonce = self.call('/users/login')['nonce']
    response = hashlib.md5.new(nonce + ':'+ hashlib.md5.new(password).hexdigest()).hexdigest()

    login = self.call('/users/login', user=user, nonce=nonce,
                      response=response)
    self.user_key = login['user_key']
    self.user = user
    return user