Je voudrais générer des chaînes uniques aléatoires comme celles générées par la bibliothèque MSDN ( objet d'erreur ), par exemple. Une chaîne comme «t9zk6eay» doit être générée.
98
Je voudrais générer des chaînes uniques aléatoires comme celles générées par la bibliothèque MSDN ( objet d'erreur ), par exemple. Une chaîne comme «t9zk6eay» doit être générée.
string randoms = Guid.NewGuid().ToString().Replace("-", string.Empty).Replace("+", string.Empty).Substring(0, 4);
plus peut être trouvé iciRéponses:
Utiliser Guid serait un très bon moyen, mais pour obtenir quelque chose qui ressemble à votre exemple, vous voudrez probablement le convertir en une chaîne Base64:
Je me débarrasse de "=" et "+" pour me rapprocher un peu plus de votre exemple, sinon vous obtenez "==" à la fin de votre chaîne et un "+" au milieu. Voici un exemple de chaîne de sortie:
«OZVV5TpP4U6wJthaCORZEQ»
la source
Convert.ToBase64String
s'agit, jetez un œil ici .new Guid()
sans "piratage" (falsification de l'horloge ou des structures de données Windows internes). N'hésitez pas à utiliser autant de cœurs, de threads, de primitives de synchronisation, etc. que vous le souhaitez.Mise à jour 2016/1/23
Si vous trouvez cette réponse utile, vous pourriez être intéressé par une bibliothèque de génération de mots de passe simple (~ 500 SLOC) que j'ai publiée :
Ensuite, vous pouvez générer des chaînes aléatoires comme dans la réponse ci-dessous:
L'un des avantages de la bibliothèque est que le code est mieux factorisé afin que vous puissiez utiliser le caractère aléatoire sécurisé pour plus que générer des chaînes . Consultez le site du projet pour plus de détails.
Réponse originale
Comme personne n'a encore fourni de code sécurisé, je poste ce qui suit au cas où quelqu'un le trouverait utile.
Merci à Ahmad pour avoir indiqué comment faire fonctionner le code sur .NET Core.
la source
.netcore
: Remplacervar rng = new RNGCryptoServiceProvider()
parvar rng = RandomNumberGenerator.Create()
Je vous avertis que les GUID ne sont pas des nombres aléatoires . Ils ne doivent pas être utilisés comme base pour générer tout ce que vous pensez être totalement aléatoire (voir http://en.wikipedia.org/wiki/Globally_Unique_Identifier ):
Au lieu de cela, utilisez simplement la méthode C # Random. Quelque chose comme ça ( code trouvé ici ):
Les GUID conviennent si vous voulez quelque chose d' unique (comme un nom de fichier ou une clé unique dans une base de données), mais ils ne sont pas bons pour quelque chose que vous voulez être aléatoire (comme un mot de passe ou une clé de cryptage). Cela dépend donc de votre application.
Modifier . Microsoft dit que Random n'est pas terrible non plus ( http://msdn.microsoft.com/en-us/library/system.random(VS.71).aspx ):
la source
J'ai simplifié la solution @Michael Kropats et créé une version LINQ-esque.
la source
Je ne pense pas qu'ils soient vraiment aléatoires, mais je suppose que ce sont des hachages.
Chaque fois que j'ai besoin d'un identifiant aléatoire, j'utilise généralement un GUID et je le convertis en sa représentation "nue":
la source
Essayez la combinaison entre Guid et Time.
la source
Je suis surpris qu'il n'y ait pas de solution CrytpoGraphic en place. Le GUID est unique mais non sécurisé sur le plan cryptographique . Voir ce Dotnet Fiddle.
Dans le cas où vous souhaitez ajouter un Guid:
Une chaîne alphanumérique plus propre:
la source
Solution Michael Kropats dans VB.net
la source
Cela fonctionne parfaitement pour moi
la source
Cela a été demandé pour différentes langues. Voici une question sur les mots de passe qui devrait également s'appliquer ici.
Si vous souhaitez utiliser les chaînes pour raccourcir l'URL, vous aurez également besoin d'une vérification du dictionnaire <> ou de la base de données pour voir si un ID généré a déjà été utilisé.
la source
Si vous voulez une chaîne alphanumérique avec des caractères minuscules et majuscules ([a-zA-Z0-9]), vous pouvez utiliser Convert.ToBase64String () pour une solution simple et rapide.
En ce qui concerne l'unicité, consultez le problème de l' anniversaire pour calculer la probabilité qu'une collission soit donnée (A) la longueur des chaînes générées et (B) le nombre de chaînes générées.
la source
la source
Obtenir une clé unique à l'aide du code de hachage GUID
la source