Как хешировать уже хешированное значение для заданного диапазона? - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь разработать алгоритм одноразового пароля. Я хочу получить строку ввода от пользователя и повторно хэшировать ее по 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 ]

3 голосов
/ 04 июня 2019
  1. Циклы For в Python могут быть реализованы проще.Просто напишите 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())
0 голосов
/ 04 июня 2019

Вместо этого используйте цикл 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())
...