у меня есть словарь паролей. и хеш-ключи из 6 паролей и сольный ключ.
вот мой код. я прочитал все заданные пароли и ключ соли.
для первых трех паролей я читаю каждый элемент словаря и преобразовываю его в хеш, используя sha1, sha256 и md5 соответственно, и сравниваю с заданными хэшами паролей.
теперь для 4-го 5-го и 6-го пароля. есть солевой ключ. некоторые инструкции: -
Кроме того, три хэша были созданы путем объединения значения соли с паролем. Ваш код также должен иметь возможность восстанавливать пароли из этих трех соленых хэшей.
- Значение соли хранится в файле в виде последовательности пар шестнадцатеричных символов.
- ПРИМЕЧАНИЕ. Каждая пара шестнадцатеричных символов содержит один байт соли, который вы должны использовать. Например, шестнадцатеричная пара a9 должна быть преобразована в байтовое значение 169 (десятичное), чтобы использоваться в качестве солт-байта.
Кроме того,
""Не преобразовывайте шестнадцатеричные символы из файла соли в десятичные символы. Я сказал, что вы должны преобразовать каждую пару шестнадцатеричных символов в одно байтовое значение. Я просто использовал пример, в котором я показал вам это значение байта с основанием 10, то есть десятичное значение. После того, как вы выполните это преобразование, у вас будет последовательность значений байтов, которые составляют ваше значение соли. Затем вы объединяете эти значения со значениями байтов выбранного пароля. При использовании Java вы можете вызвать метод update() вашего объекта дайджеста дважды — один раз для каждой последовательности байтовых значений. При использовании Python используйте метод update() хеш-объекта, созданного с помощью hashlib.""
я не понимаю, как и что я должен сочетать с солью хэш. как найти пароли, эквивалентные последним трем хэшам паролей (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