Ich arbeite an einem einfachen Wörterbuchangriffsskript, bei dem jedes englische Kleinwort auf den Chiffretext überprüft wird, und meine erste Version hat gut funktioniert. Es sah so aus:hexdigest() löst TypeError aus: Erforderliches Argument 'length' (pos 1) nicht gefunden
import hashlib
import random
def dict_attack(pwds):
f = open('Dictionary.txt', 'r')
words = f.readlines()
f.close()
cracked = []
for pwd in pwds:
for w in words:
word = w.strip('\n')
word = word.strip(' ')
hashed = hashlib.md5(word.encode())
if hashed.hexdigest() == pwd:
print("[+] Found {} as {}, updating...".format(pwd, word))
cracked.append(word)
break
print("[-] {}/{} passwords found!".format(len(cracked), len(pwds)))
return cracked
def main():
# To generate new ciphertext
f = open('Dictionary.txt', 'r')
words = f.readlines()
f.close()
for b in range(0, 10):
passwords.append(random.choice(words))
passwords[b] = passwords[b].strip('\n')
passwords[b] = passwords[b].strip(' ')
hashed_passwords = []
for p in passwords:
hashed_passwords.append(hashlib.md5(p.encode()).hexdigest())
#print(hashed_passwords)
print(dict_attack(hashed_passwords))
main()
Wie Sie sehen können, verwendete die Funktion dict_attack nur den MD5-Hash. In meiner nächsten Version dieses Skripts plante ich, jeden Algorithmus in der hashlib.algorithms_guaranteed-Bibliothek durchzugehen und jedes Wort im Wörterbuch mit jedem Algorithmus zu verschlüsseln und gegen den Chiffretext zu prüfen. Dieser Code sah wie folgt aus:
import hashlib
arguments = [[hashlib.md5('hello'.encode())]]
f = open('Dictionary.txt', 'r')
words = f.readlines()
f.close()
# Remember to strip the \n's
cracked = {}
for ciphertext in arguments[0]:
for word in words:
for alg in hashlib.algorithms_guaranteed:
exec("hashed = hashlib.{}(word.encode())".format(alg))
if hashed.hexdigest() == ciphertext:
cracked[ciphertext] = [word, alg]
print("[+] Found {} as {} with {} algorithm!".format(ciphertext, word, alg))
break
print(cracked)
Allerdings, wenn ich meinen Code lief, warf er diesen Fehler:
TypeError: Required argument 'length' (pos 1) not found
Warum ist das passiert, und wie kann ich es beheben?
Haben Sie sich angesehen, welchen Algorithmus Sie zu der Zeit haben und dann welche Argumente es braucht? Als eine Randnotiz - Sie machen eine Menge wiederholte Arbeit in Ihrem ersten Beispiel, die nicht wunderbar effizient ist ... –
'shake_256' Algorithmus' hexdigest' benötigt einen Längenparameter nach [docs] (https: // docs .python.org/3/library/hashlib.html # Shake-Variable-Length-Digests). –
@ JonClements Ja, mein erster war nicht wirklich gut. Es war eher ein Coder-Skript als ein Programmierer-Skript, was einer der Gründe dafür ist, dass ich eine V2 gemacht habe. –