Использование salt ha sh для преобразования паролей в хэши - PullRequest
0 голосов
/ 28 апреля 2020

у меня есть словарь паролей. и ха sh ключи из 6 паролей и солевой ключ.

вот мой код. Я прочитал все данные пароли и солт-ключ.

для первых трех паролей. Я прочитал каждый элемент словаря и преобразовал его в ha sh, используя sha1, sha256 и md5 соответственно, и сравнил с данными хэшами паролей. .

теперь для 4-го, 5-го и 6-го пароля. здесь дан солевой ключ. Вот некоторые инструкции: -

Кроме того, было создано три хэша путем объединения значения соли с паролем. Ваш код также должен восстанавливать пароли из этих трех соленых хэшей.

  1. Значение соли хранится в файле в виде последовательности шестнадцатеричных пар символов.
  2. ПРИМЕЧАНИЕ : Каждая пара шестнадцатеричных символов содержит один байт значения соли, который вы должны использовать. Например, шестнадцатеричная пара a9 должна быть преобразована в байтовое значение 169 (десятичное число), чтобы использоваться в качестве солевого байта.

, кроме того,

"" Не преобразовывайте шестнадцатеричные символы из файла соли в десятичные символы. Я сказал, что вы должны преобразовать каждую пару шестнадцатеричных символов в одно байтовое значение. Я просто использовал пример, в котором я показал вам это значение байта, используя основание 10, то есть десятичное значение. Как только вы выполните это преобразование, у вас будет последовательность байтовых значений, которые составляют ваше солт-значение. Затем вы объединяете эти значения с байтовыми значениями выбранного пароля. Если вы используете Java, вы можете вызывать метод update () вашего объекта дайджеста дважды - один раз для каждой последовательности значений байтов. При использовании Python, используйте метод update () объекта ha sh, созданного с помощью hashlib. ""

Я не понимаю, как и что я должен сочетать с солью га sh. Как найти пароли, эквивалентные трем последним хэшам паролей (spw1, spw2, spw3). Я не ищу решение, но некоторое понимание использования будет полезно. Я читаю документацию библиотеки hashlib для этого.

import time
import hashlib
import sys

pw1 = open('pw1.hex','r').read()[:-1] # sha1
pw2 = open('pw2.hex','r').read()[:-1] # sha256
pw3 = open('pw3.hex','r').read()[:-1] # md5
salt = open('salt.hex','r').read()[:-1]
spw1 = open('spw1.hex','r').read()[:-1]
spw2 = open('spw2.hex','r').read()[:-1]
spw3 = open('spw3.hex','r').read()[:-1]

print("Password 1 :", pw1)
print("Password 2 :", pw2)
print("Password 3 :", pw3)
print("Salt :", salt)
print("Salt Password 1 :", spw1)
print("Salt Password 2 :", spw2)
print("Salt Password 3 :", spw3)

salts = []
for i in range(0, len(salt), 2):
    salts.append(pw1 + str(int(salt[i] + salt[i+1], 16)))

# start =import time
import hashlib
import sys

pw1 = open('pw1.hex','r').read()[:-1]
pw2 = open('pw2.hex','r').read()[:-1]
pw3 = open('pw3.hex','r').read()[:-1] # md5
salt = open('salt.hex','r').read()[:-1]
spw1 = open('spw1.hex','r').read()[:-1]
spw2 = open('spw2.hex','r').read()[:-1]
spw3 = open('spw3.hex','r').read()[:-1]

print("Password 1 :", pw1)
print("Password 2 :", pw2)
print("Password 3 :", pw3)
print("Salt :", salt)
print("Salt Password 1 :", spw1)
print("Salt Password 2 :", spw2)
print("Salt Password 3 :", spw3)

salts = []
for i in range(0, len(salt), 2):
    salts.append(pw1 + str(int(salt[i] + salt[i+1], 16)))    

start = time.time()
filename = open('dic-0294.txt','r')
guess=" "
for line in filename:
    m = hashlib.sha1()
    m.update(line[:-1].encode('utf-8'))
    guess = m.hexdigest()
    if guess == pw1:
        print ("total runtime for password 1 was --", time.time() - start, " seconds and the answer was:", line[:-1])
        break
#close dictionary file
filename.close()

start = time.time()
filename = open('dic-0294.txt','r')
guess=" "
for line in filename:
    m = hashlib.sha256()
    m.update(line[:-1].encode('utf-8'))
    guess = m.hexdigest()
    if guess == pw2:
        print ("total runtime for password 2 was --", time.time() - start, " seconds and the answer was:", line[:-1])
        break
#close dictionary file
filename.close()

start = time.time()
filename = open('dic-0294.txt','r')
guess=" "
for line in filename:
    m = hashlib.md5()
    m.update(line[:-1].encode('utf-8'))
    guess = m.hexdigest()
    if guess == pw3:
        print ("total runtime for password 3 was --", time.time() - start, " seconds and the answer was:", line[:-1])
        break
#close dictionary file
filename.close()

ВЫХОД: -

Password 1 : 44afbc26b785d9c5cfce73aa06dd0711f2e290d5
Password 2 : d2e7560d96b0f6ceac88ac8d94f0fdc39d36252d2432ecb1ab510450a93b3c2c
Password 3 : 95d19ab48d18d4232b87bb086319998c
Salt : d41d8cd98f00b204e9800998ecf8427e
Salt Password 1 : 955597a308bd22402bf841f19d393526a15396cf49e9477af9f21f45fcfe13c8
Salt Password 2 : 00b961e20655b8cb16fb7aff3d3a28a3
Salt Password 3 : bbdefeaebc9ac07b9ad47fd8f9e1b7bf3170bcfc
total runtime for password 1 was -- 2.097641944885254  seconds and the answer was: computationally-intensive
total runtime for password 2 was -- 0.6852984428405762  seconds and the answer was: BIzarre
total runtime for password 3 was -- 1.529630184173584  seconds and the answer was: instructed
...