我正在尝试设计一次性密码算法。我想从用户那里获得一个字符串输入,并将其重复哈希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())
但是此代码不起作用。我期望它“重新散列”该值,并且每次这样做都会将其添加到数组中。
任何帮助都将受到感激:)
答案 0 :(得分:3)
Python中的For循环可以更轻松地实现。只需编写for i in range(10):
,而无需在循环中添加任何内容。
hashStore.append(rehash)
使用rehash
而不是reHash
您不会记住reHash
,因此您总是会尝试对起始字符串进行哈希处理
如果要重新哈希,应将哈希转换为字符串: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())