【问题标题】:Making hash digest rounds进行哈希摘要轮次
【发布时间】:2018-01-20 07:42:10
【问题描述】:

我正在尝试创建一个函数,该函数将采用 sha1 哈希并自行更新 500 次,例如:

>>> import hashlib
>>> d = hashlib.sha1()
>>> d.update("test")
>>> d.hexdigest()
'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'
>>> e = hashlib.sha1()
>>> e.update("a94a8fe5ccb19ba61c4c0873d391e987982fbbd3")
>>> e.hexdigest()
'c4033bff94b567a190e33faa551f411caef444f2'
>>> 

我想要做的是将原始字符串 test 的哈希值从给定的哈希值中重新哈希到另一个哈希值中。

我在执行此操作时遇到了一些问题:

def sha1_rounds(string, salt=None, front=False, back=False, rounds=500, **placeholder):
    obj = hashlib.sha1()
    if salt is not None and front and not back:
        obj.update(salt + string)
    elif salt is not None and back and not front:
        obj.update(string + salt)
    else:
        obj.update(string)
    for _ in range(rounds):
        obj1 = obj.hexdigest()
        obj = obj.update(obj1)
    return obj.hexdigest()

当这段代码运行时,它给了我以下错误:

Traceback (most recent call last):
  File "<pyshell#93>", line 1, in <module>
    sha1_rounds("test")
  File "<pyshell#92>", line 10, in sha1_rounds
    obj1 = obj.hexdigest()
AttributeError: 'NoneType' object has no attribute 'hexdigest'

如果我理解正确,这个错误告诉我的是,当我尝试重新更新哈希对象时,它会导致None。但是,我尝试了一些不同的方法,但我不完全确定如何成功地做到这一点。如何根据给定的哈希在 for 循环内创建新的哈希对象?

【问题讨论】:

  • 我建议你升级到Python 3,这样你就可以使用hashlib.pbkdf2_hmac
  • @PM2Ring 这是一个哈希破解框架,所以我试图破解哈希,而不是存储它

标签: python python-2.7 hash sha1


【解决方案1】:

我想我已经弄清楚了,通过创建一个新的哈希对象并在回合之前对字符串进行十六进制消化,我可以通过将哈希对象的创建移到 for 循环之外来提高性能。如果有人有任何其他想法,我会很高兴看到他们:

def sha1_rounds(string, salt=None, front=False, back=False, rounds=500, **placeholder):
    obj = hashlib.sha1()
    if salt is not None and front and not back:
        obj.update(salt + string)
    elif salt is not None and back and not front:
        obj.update(string + salt)
    else:
        obj.update(string)
        hashed = obj.hexdigest()
    for _ in range(rounds):
        obj1 = hashlib.sha1()
        obj1.update(hashed)
        hashed = obj1.hexdigest()
    return hashed

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多