67 lines
1.6 KiB
Python
67 lines
1.6 KiB
Python
import hashlib
|
|
|
|
def hash_file(filepath):
|
|
BUF_SIZE = 65 * 1024
|
|
|
|
sha = hashlib.sha256()
|
|
|
|
with open(filepath, 'rb') as f:
|
|
while True:
|
|
data = f.read(BUF_SIZE)
|
|
if not data:
|
|
break
|
|
sha.update(data)
|
|
return sha.hexdigest()
|
|
|
|
def hash_bytes(data):
|
|
sha = hashlib.sha256()
|
|
sha.update(data)
|
|
return sha.hexdigest()
|
|
|
|
def hash_string(data:str):
|
|
sha = hashlib.sha256()
|
|
sha.update(str(data).encode('utf-8'))
|
|
return sha.hexdigest()
|
|
|
|
# ---------------
|
|
import datetime
|
|
import string
|
|
import itertools
|
|
import random
|
|
|
|
def get_nonce(characters, lenght):
|
|
yield from itertools.product(*([characters] * lenght))
|
|
|
|
def count_leading_zeros(text):
|
|
n = 0
|
|
for i in range(len(text)):
|
|
if text[:i] == "0" * i:
|
|
n = i
|
|
else:
|
|
break
|
|
return n
|
|
|
|
def mine_user(data, force=4, nonce_lenght=4):
|
|
characters = '[@_!#$%^&*()<>?/\|}{~:]'+string.ascii_letters+string.digits
|
|
while True:
|
|
for x in get_nonce(characters, nonce_lenght):
|
|
nonce = ''.join(x)+random.choice(characters)
|
|
hash = hash_string(data+ nonce)
|
|
leading_zeros = count_leading_zeros(hash)
|
|
if leading_zeros >= force:
|
|
return nonce
|
|
|
|
|
|
def test():
|
|
print(datetime.datetime.now(), "EXECUTING HASH TEST - MINE USER")
|
|
public_key_str = "A4DZSk+TlR+4w39MbiIAQbti+N0H1QlJEhRH2DI6Iubj"
|
|
nonce, hash = mine_user(public_key_str)
|
|
|
|
print(nonce, hash)
|
|
|
|
# test()
|
|
|
|
# A4DZSk+TlR+4w39MbiIAQbti+N0H1QlJEhRH2DI6Iubj
|
|
# 8
|
|
# eYnU*@
|
|
# [/Q#7r |