Gerador de número aleatório retornando zeros
Eu tenho um aplicativo ASP.NET que depende da classe Random para gerar uma seqüência de caracteres pseudo-aleatória. Ele usa o código a seguir (isso faz parte de um pedaço maior de código de amostra fornecido pelo Google para aplicativos SSO):
public static class SamlUtility
{
private static Random random = new Random();
private static char[] charMapping = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p' };
public static string CreateId()
{
byte[] bytes = new byte[20]; // 160 bits
random.NextBytes(bytes);
char[] chars = new char[40];
for (int i = 0; i < bytes.Length; i++)
{
int left = (bytes[i] >> 4) & 0x0f;
int right = bytes[i] & 0x0f;
chars[i * 2] = charMapping[left];
chars[i * 2 + 1] = charMapping[right];
}
return new string(chars);
}
}
Isso normalmente funciona muito bem, mas de tempos em tempos começa a gerar uma sequência de 'a'. Pelo que sei da depuração, o Random simplesmente para de retornar números aleatórios e preenche bytes com o mesmo valor repetidamente. Corrigi isso usando um GUID, mas estou curioso para saber o que aconteceu no código original. Estou assumindo alguma forma de exaustão da entropia, mas não consigo encontrar nenhuma referência nos documentos. Além disso, sempre que isso aconteceu, a execução de iisreset restaurou o comportamento correto.
Qualquer sugestão sobre o que estava dando errado seria muito apreciada.