我需要一种方法来生成精确数量的伪随机(字符串)数据。例如,我想编写一个方法,该方法接受要生成的字节数的参数并返回该精确大小的字符串。
我最初打算简单地为每个需要的字节生成 1 个字符,但显然字符不再都是一个字节了。
任何帮助表示赞赏!
我建议使用RNGCryptoServiceProvider它可以生成任意数量的随机字节。然后您可以将其转换为字符串(例如使用 byte64 编码或其他方法)。
记得添加using System.Security.Cryptography;
到文件中。
public class RandomService : IDisposable
{
private readonly RNGCryptoServiceProvider rngCsp;
public CryptoService()
{
rngCsp = new RNGCryptoServiceProvider();
}
public byte[] GetRandomBytes(int length)
{
var bytes = new byte[length];
rngCsp.GetBytes(bytes);
return bytes;
}
public string GetRandomString(int length)
{
var numberOfBytesForBase64 = (int) Math.Ceiling((length*3)/4.0);
string base64String = Convert.ToBase64String(GetRandomBytes(numberOfBytesForBase64)).Substring(0, length); //might be longer because of padding
return base64String.Replace('+', '_').Replace('/', '-'); //we don't like these base64 characters
}
public void Dispose()
{
rngCsp.Dispose();
}
}
您可能可以参加Randombyte[]
课程,然后转换为ToString()
char[] UsableChars = { 'a', 'b', 'c', '1', ...., `☺` };
Random r = new Random();
int wantedSize = 12;
string s = new string (Enumerable.Range(0, wantedSize)
.Select((i) => UsableChars[r.Next(UsableChars.Length)]).ToArray());
如果您使用一组有限的字符,您可以选择那些最终将作为单字节代码的字符,而不管使用何种编码。
public byte[] CreateFiller(int length, Random rnd) {
string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
return Encoding.UTF8.GetBytes(Enumerable.Range(0, length).Select(i => chars[rnd.Next(chars.Length)]).ToArray());
}
// only use the overload that creates a Random object itself if you use it once, not in a loop
public byte[] CreateFiller(int length) {
return CreateFiller(length, new Random());
}