In teoria, la decodifica o la non decodifica non ha importanza, perché la codifica Base64 è una permutazione pubblica (ogni sequenza di caratteri Base64 può essere decodificata e ri-codificata da tutti, e questo è deterministico). Se la codifica Base64 rinforza o indebolisce la funzione di hashing della password e la funzione di hashing della password è scadente e debole e deve essere sostituita con qualcosa di più strong.
In pratica , alcune funzioni di hashing della password presentano limitazioni; in particolare, la maggior parte delle implementazioni di bcrypt accettano password di dimensioni fino a 51 o 55 byte, non di più. Poiché la codifica Base64 aumenta la dimensione dei dati (ogni 3 byte restituisce 4 caratteri, reencoded come 4 byte), l'hashing della codifica Base64 implica una dimensione massima della password inferiore. Per questo motivo, è consigliabile decodificare Base64 ed elaborare la password non elaborata.
Tuttavia c'è anche una buona ragione non per decodificare Base64, a seconda della libreria di supporto. Se l'implementazione dell'hash della password utilizza stringhe come input, allora quel codice necessariamente esegue la codifica da carattere a byte. Ciò può implicare problemi di codifica molto scomodi, specialmente con caratteri non ASCII (un semplice carattere latin-1 come "é" ha diverse rappresentazioni in Unicode, producendo sequenze di byte diverse). È importante che questa codifica sia deterministica (quando la password è verificata, dovrebbe usare la stessa codifica di quando è stata scelta inizialmente). Quando si riceve Base64, il chiamante ha già fatto il lavoro e presumibilmente concorda con se stesso. Pertanto, è consigliabile non decodificare Base64, e invece di cancellarlo direttamente.
O forse no. Una visualizzazione alternativa è che i problemi di codifica richiedono un'elaborazione sistematica e può essere una buona idea decodificare sistematicamente tutto ciò che ricevi, per garantire la codifica con le stesse regole (la codifica regole sul server). Ciò potrebbe effettivamente aiutare se l'utente utilizza diversi tipi di software client, con diverse regole di codifica.
Quindi, davvero, dipende da te. Personalmente, decoderei Base64, perché mi fido più di altre persone per elaborare correttamente le stringhe Unicode, ed evita di abbassare artificialmente la password massima dimensione nel caso in cui la funzione di hashing sia bcrypt (altre funzioni come PBKDF2 non hanno tali limiti).