如何对给定范围的已哈希值进行哈希处理?

时间:2019-06-04 13:02:26

标签: python python-3.x cryptography md5 hashlib

我正在尝试设计一次性密码算法。我想从用户那里获得一个字符串输入,并将其重复哈希100次,然后将每个字符串存储到一个数组中。我陷入需要重复哈希字符串的部分。

我已经尝试了基础知识,我知道如何使用hashlib一次获取字符串值的哈希。在下面的代码中,我尝试以这种方式应用它以进行10次操作,但是我觉得有一种更简单的方法可以实际工作。

import hashlib

hashStore= []

password= input("Password to hash converter: ")
hashedPassword= hashlib.md5(password.encode())
print("Your hash is: ", hashedPassword.hexdigest())

while i in range(1,10):
    reHash= hashlib.md5(hashedPassword)
    hashStore.append(rehash)
    i= i+1
    print("Rehashed ",reHash.hexdigest())

但是此代码不起作用。我期望它“重新散列”该值,并且每次这样做都会将其添加到数组中。

任何帮助都将受到感激:)

2 个答案:

答案 0 :(得分:3)

  1. Python中的For循环可以更轻松地实现。只需编写for i in range(10):,而无需在循环中添加任何内容。

  2. hashStore.append(rehash)使用rehash而不是reHash

  3. 您不会记住reHash,因此您总是会尝试对起始字符串进行哈希处理

  4. 如果要重新哈希,应将哈希转换为字符串:reHash.hexdigest().encode('utf-8')

这是完整的工作代码:

import hashlib

hashStore = []

password = input("Password to hash converter: ")
hashedPassword = hashlib.md5(password.encode())
print("Your hash is: ", hashedPassword.hexdigest())
reHash = hashedPassword
for i in range(10):
    reHash = hashlib.md5(reHash.hexdigest().encode('utf-8'))
    hashStore.append(reHash)
    print("Rehashed ",reHash.hexdigest())

答案 1 :(得分:0)

使用for循环,用初始哈希值初始化hashStore,然后在每个循环中重新哈希最后一个哈希值(hashStore[-1]

import hashlib

password= input("Password to hash converter: ")
hashedPassword= hashlib.md5(password.encode())
print("Your hash is: ", hashedPassword.hexdigest())

hashStore= [hashedPassword]
for _ in range(1,100):
    reHash = hashlib.md5(hashStore[-1].hexdigest().encode('utf-8'))
    hashStore.append(reHash)
    print("Rehashed ",reHash.hexdigest())