Надежно сгенерируйте 6 контактов MFA - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь сгенерировать 6-значный код, который будет использоваться для двухфакторной аутентификации, на первый взгляд я мог бы сделать что-то вроде этого:

Random random = new Random();
var securitycode = random.Next(1000000, 10000000);

Однако это кажется мне несколько небезопасным, потому что,вероятно, есть способ предсказать следующее число, если вы можете выяснить начальные значения, взяв много кодов безопасности.

Я думаю, что есть лучший способ получить безопасный код, используя RNGCryptoServiceProvider, но яЯ немного запутался в том, как я могу убедиться, что сгенерированный код состоит из 6 цифр

private string GenerateSecurityCode(int length)
{
    var provider = new RNGCryptoServiceProvider();
    var byteArray = new byte[8];
    provider.GetBytes(byteArray);
    var code = BitConverter.ToUInt32(byteArray, 0);
    //how can I assure the code is 6 digits
}

Является ли это безопасным способом генерации кодов MFA, если нет, то каким будет хороший метод генерации числовых кодов?

1 Ответ

0 голосов
/ 13 июня 2019

Я не уверен, является ли это наиболее безопасным, но в итоге я сделал это:

private string GenerateSecurityCode()
{
    var buffer = new byte[sizeof(UInt64)];
    var cryptoRng = new RNGCryptoServiceProvider();
    cryptoRng.GetBytes(buffer);
    var num = BitConverter.ToUInt64(buffer, 0);
    var code = num % 1000000;
    return code.ToString("D6");
}
...