<jupyter_start><jupyter_text>Prosty <NAME><jupyter_code>import hashlib
import binascii
import itertools
import datetime

def break_password(hash_sha256, letter_num, alphabet, write_every=None):
    print("Debug: łamanie hasła")
    done = 0
    start_moment = datetime.datetime.now()
    
    for candidate_t in itertools.product(alphabet, repeat=letter_num):
        
        #konwertowanie iterowanego obiektu, aby móc go hashować
        candidate = "".join(candidate_t)
        candidate_bin = candidate.encode("utf-8")
        
        #hashowanie
        hash_obj = hashlib.sha256(candidate_bin)
        calculated_hash = hash_obj.digest()
        
        #sprawdzamy warunek
        if calculated_hash == hash_sha256:
            #kończymy działanie i zwracany wynik jeśli znaleziono
            end_moment = datetime.datetime.now()
            print("Odnaleziono w ciągu: " + str((end_moment - start_moment) / datetime.timedelta(seconds = 1, microseconds=1)))
            return candidate
        
        #zwiększamy licznik prób
        done = done + 1
        if  done %10000 == 0 and write_every is not None :
            #jeśli spełnione są warunki wypisania postępu to wypisujemy
            print("checking: " + candidate)
    end_moment = datetime.datetime.now()
    print("Porażka, nie odnaleziono; sprawdzono: " +str(done))
    print("\t czas działania: " + str((end_moment - start_moment) / datetime.timedelta(seconds = 1, microseconds=1)) + "us")



# 4 znakowe alfabet a 
hash_to_break = b'\xf1\xac\x93\xb9\\I\x00Z\x86r5\xc6\x19QDX\xb2{\xad2q8i\xc3\xb5%\xe74T\xc9\x04f'
break_password(hash_to_break, 4, alphabet_a)
# 5 znakowe alfabet a 
hash_to_break = b'0\xc2\xcbH\xd3c\xdb\x8d\xfc\xcd\x7f\xb8(\xea=w=/N\x88\xe8&\xa1F-\x9e\x15\x02\xc9\xc2\x85\x85'
break_password(hash_to_break, 4, alphabet_a)<jupyter_output><empty_output><jupyter_text>Przeszukanie<jupyter_code>#pełne przeszukanie 4a
hash_to_break = b''
break_password(hash_to_break, 4, alphabet_a)

#pełne przeszukanie 5a
hash_to_break = b''
break_password(hash_to_break, 5, alphabet_a)
#pełne przeszukanie 6a
hash_to_break = b''
break_password(hash_to_break, 6, alphabet_a)
#pełne przeszukanie 4Aa
hash_to_break = b''
break_password(hash_to_break, 4, alphabet_Aa)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10572687224669604, 'fraction_numerical': 0.033920704845814977, 'mean_word_length': 3.6728395061728394, 'pattern_counts': {'":': 0, '<': 10, '<?xml version=': 0, '>': 10, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '289677', 'license': 'MIT', 'n_tokens_mistral': 930, 'n_tokens_neox': 886, 'n_words': 156, 'path': 'docker/notebooks/brute_force.ipynb', 'repo_name': 'moroviintaas/warsztaty_hasla', 'size': '2276'}