Teóricamente, descodificar o no descodificar no importa, porque la codificación Base64 es una permutación pública (todo el mundo puede descodificar y recodificar cada secuencia de caracteres Base64, y esto es determinista). Si la codificación Base64 fortalece o debilita la función de hash de la contraseña, y la función de hashing de la contraseña es deficiente y débil, y debe reemplazarse con algo más fuerte.
En la práctica , algunas funciones de hash de contraseñas tienen limitaciones; en particular, la mayoría de las implementaciones de bcrypt aceptan contraseñas de tamaño de hasta 51 o 55 bytes, no más. Dado que la codificación Base64 aumenta el tamaño de los datos (cada 3 bytes produce 4 caracteres, recodificados como 4 bytes), la codificación Base64 implica un tamaño de contraseña máximo más bajo. Por ese motivo, es aconsejable descodificar la Base64 y procesar la contraseña sin procesar.
Sin embargo también hay una buena razón no para decodificar la Base64, dependiendo de tu biblioteca de soporte. Si su implementación de hashing de contraseñas usa cadenas como entrada, entonces ese código necesariamente hace algo de codificación de caracteres a bytes. Esto puede implicar algunos problemas de codificación muy inconvenientes, especialmente con caracteres que no son ASCII (un simple carácter latino-1 como "é" tiene varias representaciones en Unicode, lo que produce diferentes secuencias de bytes). Es importante que esta codificación sea determinista (cuando se verifica la contraseña, debe usar la misma codificación que cuando se eligió inicialmente). Cuando recibe Base64, la persona que llama ya hizo el trabajo y presumiblemente está de acuerdo con él. Por lo tanto, es aconsejable no descodificar la Base64, y en lugar de hacerla directamente.
O tal vez no. Una vista alternativa es que los problemas de codificación requieren un procesamiento sistemático, y puede ser una buena idea descodificar sistemáticamente todo lo que recibes, para asegurar la recodificación con las mismas reglas (la codificación reglas en el servidor). Esto realmente podría ayudar si el usuario emplea diferentes tipos de software cliente, con diferentes reglas de codificación.
Entonces, realmente, depende de ti. Personalmente, descodificaría la Base64, porque confío en mí más que otras personas para procesar las cadenas Unicode correctamente, y evita bajar artificialmente la contraseña máxima tamaño en caso de que la función de hashing sea bcrypt (otras funciones como PBKDF2 no tienen tales limitaciones).