Eu gostaria de gerar cadeias de caracteres únicas aleatórias como as geradas pela biblioteca MSDN. ( Objeto de erro ), por exemplo. Uma string como 't9zk6eay' deve ser gerada.
97
Eu gostaria de gerar cadeias de caracteres únicas aleatórias como as geradas pela biblioteca MSDN. ( Objeto de erro ), por exemplo. Uma string como 't9zk6eay' deve ser gerada.
string randoms = Guid.NewGuid().ToString().Replace("-", string.Empty).Replace("+", string.Empty).Substring(0, 4);
mais pode ser encontrado aquiRespostas:
Usar Guid seria uma maneira muito boa, mas para obter algo parecido com seu exemplo, você provavelmente deseja convertê-lo em uma string Base64:
Eu me livrei de "=" e "+" para chegar um pouco mais perto do seu exemplo, caso contrário, você obterá "==" no final da sua string e um "+" no meio. Aqui está um exemplo de string de saída:
"OZVV5TpP4U6wJthaCORZEQ"
fonte
Convert.ToBase64String
se trata, dê uma olhada aqui .new Guid()
sem "hackear" (adulterar o relógio ou estruturas de dados internas do Windows). Sinta-se à vontade para usar quantos núcleos, threads, primitivos de sincronização, etc., você quiser.Atualização 2016/1/23
Se você achar esta resposta útil, pode estar interessado em uma biblioteca simples de geração de senha (~ 500 SLOC) que publiquei :
Então, você pode gerar strings aleatórias, como na resposta abaixo:
Uma vantagem da biblioteca é que o código é melhor fatorado para que você possa usar a aleatoriedade segura para mais do que gerar strings . Confira o site do projeto para mais detalhes.
Resposta Original
Já que ninguém forneceu um código seguro ainda, eu posto o seguinte caso alguém o considere útil.
Obrigado a Ahmad por apontar como fazer o código funcionar no .NET Core.
fonte
.netcore
: substituirvar rng = new RNGCryptoServiceProvider()
porvar rng = RandomNumberGenerator.Create()
Devo advertir que os GUIDs não são números aleatórios . Eles não devem ser usados como base para gerar algo que você espera que seja totalmente aleatório (consulte http://en.wikipedia.org/wiki/Globally_Unique_Identifier ):
Em vez disso, apenas use o método C # Random. Algo assim ( código encontrado aqui ):
GUIDs são adequados se você deseja algo exclusivo (como um nome de arquivo ou chave exclusiva em um banco de dados), mas não são adequados para algo que você deseja que seja aleatório (como uma senha ou chave de criptografia). Portanto, depende da sua aplicação.
Editar . A Microsoft diz que Random também não é tão bom ( http://msdn.microsoft.com/en-us/library/system.random(VS.71).aspx ):
fonte
Simplifiquei a solução @Michael Kropats e fiz uma versão no estilo LINQ.
fonte
Não acho que sejam realmente aleatórios, mas acho que são alguns hashes.
Sempre que preciso de algum identificador aleatório, costumo usar um GUID e convertê-lo em sua representação "simples":
fonte
Experimente a combinação entre Guid e Time.Ticks
fonte
Estou surpreso por não haver uma solução criptográfica em vigor. O GUID é exclusivo, mas não criptograficamente seguro . Veja este Dotnet Fiddle.
Caso você queira adicionar um Guid ao início:
Uma string alfanumérica mais limpa:
fonte
Solução Michael Kropats em VB.net
fonte
Isso funciona perfeito para mim
fonte
Isso foi solicitado em vários idiomas. Aqui está uma pergunta sobre senhas que deve ser aplicável aqui também.
Se você quiser usar as strings para encurtamento de URL, também precisará de um Dicionário <> ou verificação de banco de dados para ver se um ID gerado já foi usado.
fonte
Se quiser strings alfanuméricas com caracteres minúsculos e maiúsculos ([a-zA-Z0-9]), você pode usar Convert.ToBase64String () para uma solução rápida e simples.
Quanto à exclusividade, verifique o problema do aniversário para calcular a probabilidade de uma colisão receber (A) o comprimento das strings geradas e (B) o número de strings geradas.
fonte
fonte
Obtenha uma chave única usando o código Hash GUID
fonte