Как расшифровать хешированный пароль - PullRequest
0 голосов
/ 21 марта 2020

Некоторое время я занимался мини-программированием, и у меня возникли проблемы со страницей входа в систему. Я использовал зависимость hashlib и генерировал свои собственные соли, чтобы иметь sh пароли пользователя. Поскольку для хеширования Hashlib требуется байтовый формат, я должен кодировать свой текст в utf-8, я не очень разбираюсь в кодировке, но я решил, что проблема с кодировкой возникает, когда у меня есть sh мои пароли. Либо я получаю ошибку начального байта, либо ошибку продолжения байта.

Синтаксическая лента: UnicodeDecodeError: 'utf-8' codec can't decode byte 0x85 in position 1: invalid start byte

Я пробовал кодирование с использованием символов latin-1 и utf-16, но оно не совпадает с формат, который у меня был ранее с моим старым устаревшим кодом, где программа фактически работала. С тех пор я заархивировал эту программу и понятия не имею, что я сделал, чтобы исправить ошибку.

Ожидаемый формат хешированных паролей должен быть: 4ac2e277734c1e9e21616d7cb9bfa777b8a765af4f48e19ebac12c4173149618

Код:

import hashlib
salt = ['1AsnOZtM41','M6IQQD4fRb','XgJbmMhlg9']
login = open('login.csv','r+')
## Login format = [USERNAME,PASSWORD,SALTNUMBER]
def membership():
    linevarc = ''
    newusr = input('Enter your username: ')
    newpass = input('Enter your password: ')
    newhash = hashlib.sha256()
    newrand = random.randint(0,2)
    for line in login:
        newlog = line.split(',')
        if newusr.upper() == newlog[0]:
            print('This username is already taken, Please re-enter all details')
            login.seek(0)
            membership()
    login.seek(0)
    for line in login:
      save = line.split(',')
      if newusr.upper() != newlog[0]:
          linevarc = linevarc + save[0] + ',' + save[1] + ',' + save[2] + '\n'
          print(str(linevarc))
          break
          #login.write(str(newdetails))
    for line in login:
      if newusr.upper() != newlog[0]:
        passalter = str(newpass + salt[int(newrand)])
        print(passalter)
        newhash.update(passalter.encode('utf-8'))
        var_hash = str(newhash.digest())
        print(var_hash)
        linevarc = linevarc + newusr.upper() + ',' + var_hash + ',' + str(newrand)
        print(str(linevarc))

Я нахожу проблему странной, так как я использовал подобный код для моей системы входа в систему, который работал отлично. Если вы найдете какое-либо решение, пожалуйста, не стесняйтесь комментировать и добавлять изменения в код.

...