Strumenti per sviluppatori · SHA calcolatore hash
Come SubtleCrypto.digest calcola un hash SHA-256 nel browser
· Come funziona
sha-256 crittografia API del browser
Ogni browser moderno può eseguire l'hashing dei byte in modo nativo tramite Web Crypto. Questo post segue una stringa da TextEncoder a crypto.subtle.digest fino a un digest esadecimale e spiega i vincoli di ogni passaggio.
Un hash senza installazione npm: le situazioni in cui un digest nativo batte una libreria in bundle
È possibile calcolare un digest per un breve valore di testo senza installare un pacchetto di hashing o pubblicare dati su un sito Web di hash remoto. I browser espongono crypto.subtle.digest su origini sicure. Un hash è un'impronta digitale deterministica di byte a lunghezza fissa; non nasconde l'input né dimostra chi lo ha fornito. ToolAcre utilizza l'implementazione del browser anziché fornire un algoritmo SHA scritto a mano e mantiene la stringa sottoposta ad hashing nella scheda.
Il testo non è costituito da byte: codifica l'input con TextEncoder in UTF-8 prima dell'hashing e perché questo passaggio decide la risposta
Il testo “café” e i byte inseriti in un hash non sono lo stesso tipo di oggetto. TextEncoder mappa la stringa su UTF-8 byte (63 61 66 C3 A9 per café), mentre un'ingenua conversione latina-1 avrebbe utilizzato E9 per il carattere finale e avrebbe prodotto un digest diverso. Anche un testo visivamente identico può avere forme di normalizzazione Unicode diverse. Concordare la codifica e la normalizzazione prima di confrontare gli hash tra JavaScript, un CLI e un server. La modalità testo di ToolAcre esegue esplicitamente la conversione UTF-8 prima dell'hashing.
La chiamata digest — crypto.subtle.digest con un nome di algoritmo e un ArrayBuffer e perché restituisce una promessa
crypto.subtle.digest("SHA-256", bytes) restituisce una Promise perché il lavoro crittografico potrebbe essere asincrono; attenderlo prima di leggere l'output. Il metodo accetta l'intero buffer di input anziché un iteratore di streaming. SHA-256 emette 256 bits (32 bytes) indipendentemente dal fatto che l'input contenga tre caratteri o tre milioni. La restrizione del contesto sicuro significa che HTTPS o localhost è richiesto per SubtleCrypto API e lo strumento segnala la sua assenza invece di inventare un fallback.
Da ArrayBuffer a esadecimale: trasformando i byte del risultato nella stringa di caratteri 64 che le persone riconoscono
The Promise si risolve in un ArrayBuffer di byte, non nella familiare stringa di cifre esadecimali. Converti ogni byte in due caratteri base16 con uno zero iniziale secondo necessità, ottenendo esattamente 64 caratteri minuscoli per SHA-256. Questa rappresentazione esadecimale raddoppia la lunghezza di 32 bytes, ma non modifica il digest. Base64 potrebbe rappresentare lo stesso 32 bytes in modo più compatto; un confronto ha senso solo dopo aver confermato che l'algoritmo, la codifica dell'input e la rappresentazione dell'output corrispondono.
Esempio funzionante: hashing di una breve stringa passo dopo passo, mostrando i byte in ogni fase
Per il testo ASCII abc, UTF-8 produce i byte 61 62 63. SHA-256 di questi byte esatti è ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. Provalo in ToolAcre e in un'altra implementazione hash attendibile: cambiare abc in abc seguito da una nuova riga dà un risultato diverso. Se gli output differiscono, ispezionare gli spazi bianchi nascosti e la codifica dei byte prima di sospettare la primitiva crittografica. Il digest visualizzato è un vettore di test riproducibile, non un'affermazione secondo cui abc è un segreto.
Contesti sicuri: perché crypto.subtle è disponibile solo su HTTPS e localhost
crypto.subtle è un contesto sicuro API. Una pagina di produzione HTTPS e una pagina di sviluppo localhost generalmente lo espongono; una normale pagina HTTP remota non sicura potrebbe non esserlo. Lo strumento necessita inoltre di memoria sufficiente per contenere l'input e l'output. Laddove Web Crypto non è disponibile, il passaggio silenzioso a un hash JavaScript non revisionato farebbe sì che un risultato sensibile alla sicurezza dipenda da un'implementazione diversa. Fallisci chiaramente e scegli invece un ambiente sicuro.
Cosa non copre: hashing con chiave (HMAC) e hashing incrementale di input molto grandi, che il digest one-shot API non fornisce
Il digest one-shot API non è un hashing incrementale per file di grandi dimensioni. SHA-256 non è uno schema di archiviazione delle password: gli hash veloci non salati rendono le ipotesi economiche, quindi l'archiviazione delle password richiede un KDF appositamente creato, salato e deliberatamente costoso. SHA-1 può essere visualizzato per l'interoperabilità legacy, ma la sua resistenza alle collisioni è interrotta e non è una buona scelta per i nuovi sistemi di integrità o firma. HMAC è un'autenticazione con chiave, non la stessa operazione della digestione di byte non autenticati.
Conclusione: il browser ha già una funzione hash: il calcolatore di hash ToolAcre SHA utilizza esattamente questo API, quindi il suo output è quello del browser
Il browser fornisce già SHA-256: codifica il testo come byte, attende il digest, quindi formatta il risultato per il confronto. Il calcolatore hash ToolAcre SHA segue quel percorso per il testo incollato e le etichette SHA-1 solo come legacy. Confronta prima abc con il risultato noto, quindi esegui l'hashing del materiale non sensibile effettivo di cui capisci i byte e la codifica.