mirror of
https://github.com/curly60e/pyblock.git
synced 2026-08-13 12:33:15 +02:00
90 lines
3.6 KiB
Python
90 lines
3.6 KiB
Python
import hashlib
|
|
import random
|
|
import string
|
|
import time
|
|
import curses
|
|
|
|
def sha256_hash(input_data):
|
|
sha256 = hashlib.sha256()
|
|
sha256.update(input_data.encode())
|
|
return sha256.hexdigest()
|
|
|
|
def binario_de_hexadecimal(hex_string):
|
|
"""Convierte una cadena hexadecimal en una cadena binaria."""
|
|
return bin(int(hex_string, 16))[2:].zfill(len(hex_string) * 4)
|
|
|
|
def binario_a_hex(binario):
|
|
"""Convierte una cadena binaria en una cadena hexadecimal."""
|
|
return hex(int(binario, 2))[2:].zfill(64)
|
|
|
|
def generar_cadena_aleatoria(longitud=6):
|
|
letras = string.ascii_lowercase
|
|
return ''.join(random.choice(letras) for i in range(longitud))
|
|
|
|
def mainSHA(stdscr):
|
|
curses.curs_set(0) # Oculta el cursor
|
|
input_data = generar_cadena_aleatoria()
|
|
ciclo = 1
|
|
|
|
curses.curs_set(0) # Oculta el cursor
|
|
curses.start_color()
|
|
curses.init_pair(1, curses.COLOR_GREEN, curses.COLOR_BLACK)
|
|
curses.init_pair(2, curses.COLOR_YELLOW, curses.COLOR_BLACK)
|
|
curses.init_pair(3, curses.COLOR_CYAN, curses.COLOR_BLACK)
|
|
curses.init_pair(4, curses.COLOR_MAGENTA, curses.COLOR_BLACK)
|
|
curses.init_pair(5, curses.COLOR_RED, curses.COLOR_BLACK)
|
|
|
|
while True:
|
|
stdscr.clear()
|
|
|
|
# Convertir input a ASCII y luego a binario
|
|
valores_ascii = [ord(c) for c in input_data]
|
|
valores_binarios = [bin(v)[2:].zfill(8) for v in valores_ascii]
|
|
mensaje_binario = ''.join(valores_binarios)
|
|
|
|
# Calcular hash SHA-256 del mensaje
|
|
hash_resultado = sha256_hash(input_data)
|
|
hash_binario = bin(int(hash_resultado, 16))[2:].zfill(256)
|
|
|
|
#script_sig_binario = binario_de_hexadecimal(hash_resultado[:128])
|
|
n_secuencia_binario = binario_de_hexadecimal(hash_resultado[:8])
|
|
|
|
# Crear diferentes "ventanas" para cada parte del proceso
|
|
altura, ancho = stdscr.getmaxyx()
|
|
|
|
# Ventana para el resultado
|
|
win_resultado = curses.newwin(altura // 3, ancho, 0, 0)
|
|
win_resultado.box()
|
|
win_resultado.addstr(1, 1, f"Hashing {ciclo}:", curses.color_pair(1)) # Posición de texto ajustada
|
|
win_resultado.addstr(2, 1, f"Hash SHA-256: {hash_resultado}", curses.color_pair(1))
|
|
win_resultado.addstr(3, 1, f"ScriptPubKey: {hash_resultado[:64]}", curses.color_pair(3))
|
|
win_resultado.addstr(4, 1, f"ScriptSig HEX: {hash_resultado[:32]}", curses.color_pair(3))
|
|
win_resultado.addstr(5, 1, f"nSeq BIN: {n_secuencia_binario}", curses.color_pair(4))
|
|
win_resultado.refresh()
|
|
|
|
# Ventana para el padding
|
|
win_padding = curses.newwin(altura // 3, ancho, altura // 3, 0)
|
|
win_padding.box()
|
|
win_padding.addstr(1, 1, "Padding:", curses.color_pair(1))
|
|
for i, linea in enumerate(mensaje_binario[j:j+64] for j in range(0, len(mensaje_binario), 64)):
|
|
win_padding.addstr(i + 2, 1, linea, curses.color_pair(4))
|
|
win_padding.refresh()
|
|
time.sleep(0.5)
|
|
win_padding.refresh()
|
|
|
|
# Ventana para el hash binario
|
|
win_hash_binario = curses.newwin(altura // 3, ancho, 2 * altura // 3, 0)
|
|
win_hash_binario.box()
|
|
win_hash_binario.addstr(1, 1, "BIN:", curses.color_pair(1))
|
|
for i, linea in enumerate(hash_binario[j:j+64] for j in range(0, len(hash_binario), 64)):
|
|
win_hash_binario.addstr(i + 2, 1, linea, curses.color_pair(5))
|
|
win_hash_binario.refresh()
|
|
time.sleep(1) # Esperar antes de continuar con el siguiente ciclo
|
|
|
|
# Preparar para el siguiente ciclo
|
|
input_data = hash_resultado
|
|
ciclo += 1
|
|
|
|
def ex():
|
|
# Ejecutar el proceso en un bucle de `curses`
|
|
curses.wrapper(mainSHA)
|