Mon application doit être conforme à I18N. L'une des conditions requises est que le mot de passe initial que je génère doit être dans la langue choisie par l'utilisateur. Quelle API à Java puis-je utiliser pour y parvenir? J'ai la langue de l'utilisateur et aura besoin de quelques caractères aléatoires de l'ensemble Unicode de cette langue. P>
Edit: Merci pour les réponses jusqu'à présent. Quelques clarifications: Ceci est pour une application Web. Pour des raisons de sécurité, nous ne pouvons pas maintenir un stock de caractères / mots dans différentes langues. P>
EDIT 2: En réponse aux commentaires et aux réponses: cette application sera déployée dans diverses géographies et je ne souhaite pas qu'ils devraient faire du travail pour configurer des mots de passe dans la langue précédente. Cette et la sécurité sont la raisons pour lesquelles je n'ai pas encore accepté la réponse la plus populaire. p>
9 Réponses :
Pendant que je ne suis pas sûr, définir un mot de passe par défaut est une action souhaitable (les gens ne savent souvent pas comment le changer, puis l'oublier) Si je faisais cela, je recevais une charge de mots de mots dans différentes langues et choisir peut-être deux mots aléatoires, concaténer et utiliser cela comme mot de passe. P>
signifie que vous devrez faire du travail de la jambe pour trouver les mots de la liste, mais il devrait s'agir d'un processus assez simple une fois que vous les avez. P>
Edit: Si vous faites simplement des chaînes aléatoires, il suffit beaucoup plus simple: vous stockez simplement un fichier de caractères disponibles pour chaque langue. Ouvrez le bon lorsque vous venez générer puis choisissez des lettres aléatoires. Bish Bash Bosh. Fait. P>
Edit 2: Comme Marcelo commença correctement, vous pouvez rencontrer le problème de générer un mot de passe obscène pour l'utilisateur. Il pourrait être utile de garder également des chaînes de liste noire localisées pour vérifier votre mot de passe. Si l'une des chaînes apparaissent dans le mot de passe (juste en elle, pas le tout), génère un mot de passe différent. Cela signifie que vous ne générerez jamais de mot de passe assez innocent comme Comme vous l'avez peut-être rassemblé, cela commence à ressembler à beaucoup de travail: p>
Vous trouverez peut-être que la définition d'une phrase em> em> en utilisant des mots propres connus de chaque langue (par ma réponse originale) fonctionne mieux. P>
Si tout ce qui semble trop stressant, vous risquez peut-être mieux de réinserter la raison de la définition d'un mot de passe aléatoire en premier lieu. Si c'est un périphérique de vérification de courrier électronique, il existe d'autres méthodes plus faciles à utiliser. Par exemple: envoyer un lien unique à cliquer sur p>
edit: strong> Les chiffres seront-ils d'accord? Ils sont un lot em> em> strong> plus sûr, n'ont pas besoin de peigner, sont internationaux et peuvent être assez longs pour être uniques, ils sont rarement mémorables. S'ils sont des emplois ponctuels et coly-pâte, ils devraient vous allouer. P>
Si vous avez besoin d'eux pour être courte mais très unique (et besoin de lots) peut-être mélanger des nombres avec des lettres dans des modèles prévisibles tels que ( SCunthorpe code> mais cela signifie également que vous ne recevrez pas de choses comme
locklown code> glissant non plus. P>
a code> = lettre,
n code> = numéro)
annn-annn code> donne 676 000 000 combinaisons. Même des choses simples comme
annn code> donner suffisamment pour ne pas être devinés (26 000 combos) si elles n'ont pas besoin d'être uniques ... si ces sont em> mots de passe, il n'y a rien de mal à deux étant les mêmes. p>
Vous avez lu THEDailyWTF.com/articles/Le-automated-Curse-Generator. Aspx , n'est-ce pas?
J'ai maintenant. Avait Brian et Barry ont suivi mon conseil, des mots comme Fukushita code> et
kakashite code> auraient été criblés ... et il ne faudrait pas longtemps pour générer une liste de synonymes phonétiques à l'écran out
fukusuka code>. Ne me trompe pas. Strings aléatoires aspirez parce que vous devez les décider tellement ... Si vous avez besoin d'une chaîne aléatoire, mais vous ne pouvez pas être arsé de peigner sur le texte, Utilisez simplement des chiffres b>.
"Fukusuka". Joli. Parfaitement offensant pour les locuteurs anglais / russe bilingue. "Besoin d'une chaîne aléatoire mais que vous ne pouvez pas être arresté sur le texte, utilisez simplement des chiffres" Je suis sûr que vous pouvez écrire des obscénités à l'aide de LEetspeak avec des chiffres uniquement.
Mais vous n'essayez généralement pas de prononcer une longue chaîne de chiffres comme un seul mot. Je pense que vous devez avoir l'air beaucoup plus difficile de trouver le mal.
Si vous souhaitez avoir des mots significatifs dans chaque langue, vous pouvez utiliser un ensemble de mots en anglais traduit (via Google Translator par exemple). p>
Ensuite, vous pouvez les envelopper avec des chiffres et des caractères spéciaux pour la force du mot de passe. P>
Et bien sûr, à votre place, je demanderais à l'utilisateur de modifier immédiatement tout mot de passe initial que vous fournissez à quelque chose de son choix. P>
+1. Tandis qu'un traducteur en ligne ne soit pas parfait, cette solution vous permet de rester à l'écart du générateur de malédiction de Brian / Barry. Si vous êtes inquiet pour quelqu'un de découvrir votre liste de mots anglais (et honnêtement, s'ils peuvent accéder à cette liste, je serais plus inquiet des autres choses qu'ils peuvent accomplir que la découverte de mots de passe par défaut), vous pourriez en outre convertir au hasard des lettres dans le mot aux nombres ou aux symboles. 'A' pourrait I> être converti en '@' ou à "4", ou ne pas être converti du tout.
La base de données de caractères Unicode et le référentiel de données locales communs Unicode contiennent beaucoup d'informations sur les langues et les scripts. Vous pouvez accéder aux informations en utilisant, par exemple, IBM ICU (une bibliothèque I18N / L10N plus complète que les localités de Java). P>
En particulier, vous pouvez obtenir un ensemble de caractères exemplaires, en utilisant localedata.getexemplarset . Notez cependant que le CLDR est très complet, vous devez vous attendre à des données manquantes. P>
Notez que ma réponse ne diminue en aucune manière la pertinence du commentaire de Marcelo ...
Jetez un coup d'œil à http://thedailywtf.com/articles/Le -Auomated-Curse-generator.aspx où quelque chose de similaire est décrit. Les mots clés à rechercher semblent être "Chaînes de Markov". P>
EDIT: strong> vient de remarquer que DAN04 a déjà mentionné ce lien. P>
Le JDK inclut les noms de pays d'affichage, la langue d'affichage et le texte d'affichage de chaque localisation, stockés dans tous les locaux disponibles. Vous pouvez utiliser ceci pour créer un ensemble de caractères initial pour chaque paramètre locale et utiliser caractère.touppercase code>
caractère.tolowercase code> pour obtenir également des variantes de cas.
String getCharsForLocale(Locale locale) {
Locale[] allLocales = Locale.getAvailableLocales();
StringBuilder buf = new StringBuilder();
for (Locale l: allLocales) {
buf.append(l.getDisplayName(locale).toLowerCase())
.append(l.getDisplayName(locale).toUpperCase())
.append(l.getDisplaycountry(locale).toLowerCase())
.append(l.getDisplayCountry(locale).toUpperCase())
.append(l.getDisplayLanguage(locale).toLowerCase())
.append(l.getDisplayLanguage(locale).toUpperCase());
}
// add other chars, such as decimals
DecimalFormatSymbols decimals = DecimalFormatSymbols.getInstance(locale);
buf.append(decimals.getMinusSign())
.append(decimals.getPercent())
.append(decimals.getDecimalSeparator());
// etc..
// now remove dupicates
char[] chars = new char[buf.length()];
buf.getChars(0, chars.length, chars, 0);
Arrays.sort(chars);
buf = new StringBuilder();
char last = '\0';
for (char c: chars) {
if (c!=last) buf.append(c);
last = c;
}
return buf.toString();
}
Peut-être que cela semble un peu délicat. Mais vous pouvez conserver beaucoup de mots dans une base de données. Et traduisez-les avec un outil de traduction vers la langue de l'utilisateur. (Peut-être Google , mais je ne sais pas si Google le permet.)
Un peu comme Rechapta fait. Ils ont beaucoup de tekst (comme Lorem ipsum ) où ils choisissent deux mots. P>
Vous pouvez combiner deux ou trois mots (avec une longueur maximale) avec un nombre. Peut-être avec un symbole de leur pays devant. Donc, vous obtenez des choses comme: p>
be_vogelhuis9751 code> li>
-
fr_chienvoture3104 code> li>
-
es_gatodificio9554 code> li>
-
d_brusttausend9672 code> li>
- ... li>
ul>
Peut-être que vous pouvez créer un mot anglais et le traduire avec Google traduire-le p>
C'est une question vraiment intéressante qui m'a fait penser, et j'ai plongé mes mains dans la terre. Voici mon processus de pensée
Voici le gist p> problèmes connus avec code: p>
Les mots de passe aléatoires sont des bêtes dangereuses. En anglais, par exemple, vous voudrez peut-être omettre des voyelles afin d'éviter d'obliger de petites mamies anciennes à taper des obscénités. Cela ne général dans toutes les langues, cependant.
Combien de langues faites-vous affaire?