正確な量の疑似乱数 (文字列) データを生成する方法が必要です。たとえば、生成するバイト数の引数を取り、その正確なサイズの文字列を返すメソッドをコーディングしたいと思います。
当初は、必要なバイトごとに 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();
}
}
あなたはおそらくランダムクラスを取り、に変換しbyte[]
てから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());
限られた文字セットを使用する場合は、使用するエンコーディングに関係なく、最終的に1バイトコードになる文字を選択できます。
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());
}