¿Alguien puede explicar este comportamiento?
Buffer.from('5d9RAjZ2GCob-86_Ql', 'base64url').toString('base64url') // 5d9RAjZ2GCob-86_Qg Mire de cerca el último carácter l - g
Su cadena tiene una longitud de 18 caracteres. Con 6 bits codificados en cada carácter, significa que los primeros 16 caracteres representan 96 bytes y los dos últimos representan un byte más 4 bits no utilizados. Solo los dos primeros bits del último carácter son significativos aquí. g es 100000, l es 100101. Como los últimos 4 caracteres no se usan, g es solo la primera opción para los dos bits 1 0.
Entonces, para cualquier carácter en el rango entre g y v , obtendrá una g cuando lo convierta de nuevo a Base64Url. Verhttps://en.wikipedia.org/wiki/Base64#Base64_table_from_RFC_4648