Quello che stai facendo non è "crittografia", di per sé; è "hashing". La principale differenza tra i due è che la crittografia è facilmente reversibile (con la chiave corretta ovviamente), mentre l'hashing è progettato per essere estremamente difficile da invertire in qualsiasi circostanza se non conoscendo il messaggio originale nel primo posto.
In teoria, gli hash simulano un "oracolo casuale", un ipotetico homunculus con una memoria eidetica e un modo per generare numeri perfettamente unici, perfettamente casuali senza limiti di gamma superiore. Darebbe a questo piccolo uomo un messaggio e una delle due cose accadrebbe; o non ha mai visto il messaggio prima, nel qual caso genera un nuovo numero casuale e lo dà come digest, o ha già visto quel messaggio prima, e così si ricorda e ti dà il numero che ha generato quando l'ha visto prima volta. In quel modello teorico, non vi è alcuna relazione tra un messaggio e il suo riassunto, e se nessun numero singolo appare mai due volte dall'RNG non c'è possibilità di collisione.
Purtroppo, non abbiamo un oracolo casuale ideale; l'idea ha impossibilità pratica per un'implementazione digitale, come la capacità dell'oracolo di archiviare in modo efficiente e di richiamare in modo efficiente ogni messaggio mai cancellato da chiunque, e la capacità dei client di accettare un numero che potrebbe essere centinaia o migliaia di cifre decimali in lunghezza. Invece, abbiamo funzioni hash, che sono operazioni matematiche irreversibili (a senso unico) che funzionano sul messaggio stesso, per creare una trasformazione deterministica (stesso messaggio = > stesso hash) con nessuna relazione apparente tra l'hash e il messaggio originale. Come menzionato nei commenti, non dovrebbe esserci alcun cambiamento prevedibile del valore hash prodotto apportando modifiche sistematiche al messaggio; idealmente, ogni bit del digest avrebbe una probabilità del 50% di cambiare, data una modifica di un singolo bit del messaggio.
Ci sono molti usi per una funzione hash; vengono utilizzati per la verifica delle sfide (si pensi alle credenziali di accesso come le password) senza che entrambe le parti conoscano il segreto del testo normale e vengono utilizzate come checksum per verificare che un messaggio non sia stato manomesso o danneggiato. Sono anche usati negli scenari cosiddetti di "prova del lavoro"; compiti computazionali difficili da completare ma facili da verificare.
Se dovessi trovare un modo per invertire in modo efficiente un hash digest SHA256 per produrre un messaggio (qualsiasi messaggio) che risulterebbe in tale hash, sarebbe una dimostrazione dimostrativa che in realtà l'hash è fondamentalmente rotto. SHA256 è, infatti, ritenuto sicuro, ovvero non esiste un metodo documentato, non importa quanto pratico, per iniziare con un hash digest e produrre un messaggio colliding che richiede meno lavoro del semplice tentativo di ogni possibilità (che per SHA-256 è idealmente 2) ^ 256 ~ = 10 ^ 77 possibilità).