Ci possono essere problemi con caratteri non ASCII. Una password è una sequenza di glifi, ma l'elaborazione della password (hashing) richiede una sequenza di bit , quindi deve esserci un modo deterministico per trasformare i glifi in bit. Questa è l'intera oscura palude di code page . Anche se ti limiti a Unicode , ci sono problemi a venire:
-
Un singolo carattere può avere diverse scomposizioni come punti di codice. Ad esempio, il carattere "é" (che è molto frequente in francese) può essere codificato come un singolo punto di codice U + 00E9 o come sequenza U + 0065 U + 0301; entrambe le sequenze sono pensate per essere equivalenti. L'acquisizione dell'uno o dell'altro dipende dalle convenzioni utilizzate dal dispositivo di input.
-
Una stringa Unicode è una sequenza di punti di codice (che sono numeri interi nell'intervallo da 0 a 1114110). Esistono diverse codifiche standard per convertire una tale sequenza in byte; i più comuni saranno UTF-8, UTF-16 (big-endian), UTF-16 (little-endian), UTF-32 (big-endian) e UTF-32 (little-endian). Ognuno di questi può iniziare o meno con una BOM .
Quindi una singola "é" può essere codificata in modo significativo in byte con almeno venti varianti distinte, e questo è quando si passa a "mainstream Unicode". Codifica Latin-1 o Microsoft controparte , è anche molto diffuso, quindi fai quel 21. Quale codifica un determinato software userà può dipendere da molti fattori, incluso il locale . È fastidioso quando l'utente non può più accedere al suo computer perché ha cambiato la configurazione da "Canadese-Inglese" a "Canadese-Francese".
Sperimentalmente , la maggior parte dei problemi di questo tipo viene evitata limitando le password all'intervallo di ASCII stampabile caratteri (quelli con codici che vanno da 32 a 126 - personalmente eviterei lo spazio, quindi rendi 33 a 126) e applicando la codifica mono-byte (nessuna distinta base, un carattere diventa uno byte). Poiché le password devono essere digitate su varie tastiere senza feedback visivo, l'elenco di caratteri dovrebbe essere ancora più limitato per l'usabilità ottimale (combatto quotidianamente con layout canadese in cui ciò che è scritto sulla tastiera non corrisponde necessariamente a quello che la macchina pensa di essere, specialmente quando passa attraverso uno o due Connessioni RDP ; i caratteri" < "," > "e" \ "si spostano molto spesso). Con solo lettere (maiuscole e minuscole) e cifre, andrà bene.
Potresti dire che l'utente è responsabile; è libero di usare qualsiasi personaggio desideri, purché si occupi del problema di digitarli. Ma questo non è assolutamente sostenibile: quando gli utenti hanno problemi, chiamano il tuo helpdesk e devi assumere parte dei loro errori.