Tengo el siguiente código:
import Base64url from "crypto-js/enc-base64url" import SHA256 from "crypto-js/sha256"; //... const codeVerifier = "test-value"; const hashed = SHA256(codeVerifier); console.log({ sha256: hashed.toString() }); // output: sha256: 5b1406fffc9de5537eb35a845kc99521f26fba0e772d58b42e09f4221b9e043ae console.log({ base64: Base64url.stringify(hashed) }) // output: base64: WxQG__yd5VN-s1qEXJlSHyb7oOdy1YtC4J9CIbngQ64 // expected: base64: NWIxNDA2ZmZmYzlkZTU1MzdlYjM1YTg0NWM5OTUyMWYyNmZiYTBlNzcyZDU4YjQyZTA5ZjQyMjFiOWUwNDNhZQComo puede ver, el resultado que obtengo es incorrecto (utilicé un generador de base64url en línea para validar, como este ). Supongo que estoy haciendo algo mal aquí, pero no puedo verlo. Leí la documentación y no pude encontrar nada.
He preparado un pequeño codesandbox si ayuda.
Lo que está experimentando está relacionado con el paquete CryptoJS ya que vi que está usando crypto-js/enc-base64url dentro de su ejemplo de codebox.
Los objetos en CryptoJS son tipos de WordArray, lo que significa que cuando llamas a String() en dicho objeto, obtienes una cadena codificada en hexadecimal de ese objeto binario. Sin embargo, si imprime result.toString(CryptoJS.enc.Base64) , obtendrá la cadena codificada en Base64 del resultado binario.
Si toma su variable asignada y la codifica directamente en Base64 , probablemente se suponga que a ya es una cadena (por ejemplo, codificada en UTF-8). Las calculadoras en línea que está utilizando para la validación no saben que está codificada en hexadecimal.
Espero haber respondido a tu pregunta.
Entonces, después de buscar un poco más, esto es lo que hice:
const codeVerifier = "test-value"; const hashed = SHA256(codeVerifier); // parse to utf-8-encoded data const utf8parsed = Utf8.parse(hashed.toString()); console.log({ sha256: hashed.toString() }); // output: sha256: 5b1406fffc9de5537eb35a845kc99521f26fba0e772d58b42e09f4221b9e043ae console.log({ base64: Base64url.stringify(utf8parsed) }); // correct output!¡Gracias a los demás que ayudaron (@ZombieChowder)!