如何使用C#生成随机字符,我尝试下面的代码,但它不起作用 [英] How To Generate Random Charecters Using C#, I Tried The Code Below But It Doesnt Work
本文介绍了如何使用C#生成随机字符,我尝试下面的代码,但它不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
private string GetUniqueKey()
{
int maxSize = 8 ;
int minSize = 5 ;
char[] chars = new char[62];
string a;
a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
chars = a.ToCharArray();
int size = maxSize ;
byte[] data = new byte[1];
RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
crypto.GetNonZeroBytes(data) ;
size = maxSize ;
data = new byte[size];
crypto.GetNonZeroBytes(data);
StringBuilder result = new StringBuilder(size) ;
foreach(byte b in data )
{ result.Append(chars[__b % (chars.Length - )>); }
return result.ToString();
}
推荐答案
参见https://msdn.microsoft.com/en-us/library/system.random(v=vs.110).aspx [<一个href =https://msdn.microsoft.com/en-us/library/system.random(v=vs.110).aspx\"target =_ blanktitle =New Window> ^ ] 。生成随机数并将每一个用作可接受字符串的索引:
See https://msdn.microsoft.com/en-us/library/system.random(v=vs.110).aspx[^]. Generate random numbers and use each one as an index into the string of acceptable characters:
string list = "abcdef ... etc"
int index = nextRandom % list.length // i.e. remainder
nextCharacter = list.at(index)
repeat.
使用LINQ,
它将生成5位数的随机字符。
var chars =BCDEFGHIJKLMNOPQRSTUVWXYZ0123456789;
var random = new Random();
var result = new string(
Enumerable.Repeat(chars,5)
.Select(s => s [random.Next(s.Length) )])
.ToArray());
Use LINQ,
It will generate the 5 digit random characters.
var chars ="BCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var random = new Random();
var result = new string(
Enumerable.Repeat(chars, 5)
.Select(s => s[random.Next(s.Length)])
.ToArray());
// use static classes and methods where possible
// Don't use System.Random it is not secure
private static readonly RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider();
private static void Encode(char[] data, char[] lexicon)
{
//Don't let null values break your code
if (data == null)
{
throw new ArgumentException("data");
}
if (lexicon == null)
{
throw new ArgumentException("lexicon");
}
var randomNumber = new byte[1];
int size = data.Length;
//use char[] rather than a string.
//Strings are not very secure as copies are made in memory each time a string is changed
for (int i = 0; i < size; i++)
{
//Load random number into buffer.
//Use methods that return 'void' where possible.
rngCsp.GetBytes(randomNumber);
int index = randomNumber[0];
data[i] = lexicon[index % lexicon.Length];
}
}
private static void Main(string[] args)
{
string lexicon = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
int size = 8;
var data = new char[size];
Encode(data,lexicon.ToCharArray());
string password = new string(data);
}
这篇关于如何使用C#生成随机字符,我尝试下面的代码,但它不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文