271 votes

Création de mots de passes MySQL aléatoires

Lorsqu'un utilisateur sur notre site, perd son mot de passe et se dirige vers la page Mot de passe Perdu, nous avons besoin de lui donner un nouveau mot de passe temporaire. Je n'ai pas de façon aléatoire, c'est, ou si elle correspond à tous les "nécessaires" fort règles de mot de passe, tout ce que je veux faire est de leur donner un mot de passe qu'ils peuvent changer par la suite.

L'application est une application Web écrite en C#. je pensais donc être méchant et va pour la route la plus facile d'utiliser une partie d'un Guid. c'est à dire

Guid.NewGuid().ToString("d").Substring(1,8)

Suggesstions? pensées?

644voto

Rik Points 12802

Il y a toujours `` ).

130voto

Radu094 Points 7796
<pre><code></code><p>C’est un bon avantage de pouvoir choisir parmi une liste de caractères disponibles pour le mot de passe généré (chiffres seules, uniquement des majuscules ou minuscules etc. seulement.)</p></pre>

44voto

CodesInChaos Points 60274

Les principaux objectifs de mon code:

  1. La distribution de chaînes de caractères est presque uniforme (ne vous souciez pas des déviations mineures, tant qu'ils sont petits)
  2. Il ne sort plus que quelques milliards de cordes pour chaque thèse. La génération d'un 8 chaîne de caractères (~47 bits d'entropie) est vide de sens si votre GÉNÉRATEUR génère 2 milliards de dollars (31 bits d'entropie) valeurs différentes.
  3. C'est sûr, car j'espère que les gens l'utiliser pour les mots de passe ou d'autres jetons de sécurité.

La première propriété est réalisé en prenant en 64 bits valeur modulo l'alphabet de taille. Pour les petits alphabets (comme la 62 caractères à partir de la question) cela conduit à des biais négligeable. La deuxième et la troisième propriété sont obtenus en utilisant RNGCryptoServiceProvider au lieu de System.Random.

using System;
using System.Security.Cryptography;

public static string GetRandomAlphanumericString(int length)
{
    const string alphanumericCharacters =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
        "abcdefghijklmnopqrstuvwxyz" +
        "0123456789";
    return GetRandomString(length, alphanumericCharacters);
}

public static string GetRandomString(int length, IEnumerable<char> characterSet)
{
    if (length < 0)
        throw new ArgumentException("length must not be negative", "length");
    if (length > int.MaxValue / 8) // 250 million chars ought to be enough for anybody
        throw new ArgumentException("length is too big", "length");
    if (characterSet == null)
        throw new ArgumentNullException("characterSet");
    var characterArray = characterSet.Distinct().ToArray();
    if (characterArray.Length == 0)
        throw new ArgumentException("characterSet must not be empty", "characterSet");

    var bytes = new byte[length * 8];
    new RNGCryptoServiceProvider().GetBytes(bytes);
    var result = new char[length];
    for (int i = 0; i < length; i++)
    {
        ulong value = BitConverter.ToUInt64(bytes, i * 8);
        result[i] = characterArray[value % (uint)characterArray.Length];
    }
    return new string(result);
}

(Ceci est une copie de ma réponse à Comment puis-je générer de l'aléatoire de 8 caractères alphanumériques chaînes de caractères en C#?)

32voto

anaximander Points 2554

Voici comment générer des jetons au hasard :

6voto

Adam Wright Points 31715

Pour ce genre de mot de passe, j’ai tendance à utiliser un système qui est susceptible de générer des mots de passe plus facilement « d’occasion ». Bref, souvent composé de fragments prononcés et quelques chiffres et avec aucune ambiguïté entre (est-ce un 0 ou un O ? Un 1 ou un I ?). Quelque chose comme

(Tapé directement dans le navigateur, donc utiliser seulement comme lignes directrices. En outre, ajouter plus de mots).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X