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.

Bytes originales del hash: 32 bytes a 44 caracteres Base64; texto HEX: 64 bytes a 88 caracteres
Diagrama original del flujo de bytes. A son los bytes originales del hash; B es el texto HEX de 64 caracteres. Los recuentos Base64 de 44 y 88 incluyen relleno.

RFC 6234: SHA-256 digest size

RFC 4648 §4, §8: Base64 / Base16

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 88

Consulta 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.