Representar un hash no es recodificar su texto
Un resultado SHA-256 tiene 256 bits, o 32 bytes. Base16 de RFC 4648 representa cada byte con dos dígitos hexadecimales: 64 caracteres. Base64 estándar con relleno representa los mismos 32 bytes en 44 caracteres. Codificar la cadena hexadecimal de 64 caracteres como texto UTF-8 usa 64 bytes de entrada y produce 88 caracteres Base64. Ese resultado codifica el texto que muestra el hash, no los bytes originales del hash.
Comprueba la entrada antes de usar las herramientas
Calculamos SHA-256 de abc y reprodujimos ambos caminos con código. La herramienta de hash de Moyoutil devuelve texto hexadecimal. Pegar ese valor en su herramienta Base64 codifica los bytes UTF-8 del texto y produce 88 caracteres. Esta herramienta no interpreta HEX como bytes originales del hash. El ejemplo Web Crypto independiente distingue bytes de texto HEX y muestra las longitudes de ambos caminos.
const raw = new Uint8Array(await crypto.subtle.digest(
'SHA-256', new TextEncoder().encode('abc')));
const hex = Array.from(raw,
n => n.toString(16).padStart(2, '0')).join('');
const rawBase64 = btoa(String.fromCharCode(...raw));
const textBase64 = btoa(hex); // ASCII HEX text
console.log(raw.length, hex.length,
rawBase64.length, textBase64.length);
// 32 64 44 88Consulta la documentación del sistema receptor para conocer la representación requerida. Base64 o Base64url, el relleno y los datos codificados son condiciones separadas. Coincidir en longitud no demuestra que la suma de comprobación coincida. Este artículo explica la conversión de representación; no verifica firmas ni determina si un archivo es seguro.
Preguntas frecuentes
¿Convertir a Base64 calcula otra vez el hash?
No. Codificar los bytes originales cambia su representación. Codificar texto HEX usa datos de entrada distintos. Separa ambas operaciones de recalcular SHA-256 de los datos originales.