0

正確な量の疑似乱数 (文字列) データを生成する方法が必要です。たとえば、生成するバイト数の引数を取り、その正確なサイズの文字列を返すメソッドをコーディングしたいと思います。

当初は、必要なバイトごとに 1 文字を生成するだけのつもりでしたが、どうやら文字はすべてバイトではなくなったようです。

どんな助けでも大歓迎です!

4

4 に答える 4

3

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();
    }
}
于 2012-09-26T12:08:18.063 に答える
2

あなたはおそらくランダムクラスを取り、に変換しbyte[]てからToString()

于 2012-09-26T12:06:31.307 に答える
1
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());
于 2012-09-26T12:08:15.730 に答える
0

限られた文字セットを使用する場合は、使用するエンコーディングに関係なく、最終的に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());
}
于 2012-09-26T20:50:23.893 に答える