Looking for c# Keywords? Try Ask4Keywords

C# Language Криптографически безопасные случайные данные


пример

Бывают случаи, когда класс Random () Framework не может считаться случайным, учитывая, что он основан на генераторе псевдослучайных чисел. Однако классы Crypto структуры обеспечивают нечто более надежное в виде RNGCryptoServiceProvider.

В следующих примерах кода показано, как создавать криптографически безопасные байтовые массивы, строки и номера.

Случайный байт-массив

public static byte[] GenerateRandomData(int length)
{
    var rnd = new byte[length];
    using (var rng = new RNGCryptoServiceProvider())
        rng.GetBytes(rnd);
    return rnd;
}

Случайное целое число (с четным распределением)

public static int GenerateRandomInt(int minVal=0, int maxVal=100)
{
    var rnd = new byte[4];
    using (var rng = new RNGCryptoServiceProvider())
        rng.GetBytes(rnd);
    var i = Math.Abs(BitConverter.ToInt32(rnd, 0));
    return Convert.ToInt32(i % (maxVal - minVal + 1) + minVal);
}

Случайная строка

public static string GenerateRandomString(int length, string allowableChars=null)
{
    if (string.IsNullOrEmpty(allowableChars))
        allowableChars = @"ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    // Generate random data
    var rnd = new byte[length];
    using (var rng = new RNGCryptoServiceProvider())
        rng.GetBytes(rnd);

    // Generate the output string
    var allowable = allowableChars.ToCharArray();
    var l = allowable.Length;
    var chars = new char[length];
    for (var i = 0; i < length; i++)
        chars[i] = allowable[rnd[i] % l];

    return new string(chars);
}