Генерация пароля
Я никогда не пытался сгенерировать пароли самостоятельно, но в этот день, когда большие компании постоянно взламывают, я чувствую, что безопаснее навязывать (генерировать и не пускать изменения, кроме получения заново сгенерированного для сброса). Причина в том, что, поскольку пользователи, как правило, используют пароли повторно, вы получаете взломанный означает, что они небезопасны на других сайтах, но другие сайты взламываются также означает, что их учетные записи могут быть взломаны на моем.
Поэтому я попробовал свои силы в этом, но я знаю, что это сложная тема, и почти каждый раз, когда кто-то спрашивает об этом, они неправильно понимают многие вещи, я хотел проверить, не пропустил ли я что-нибудь очевидное, что нарушает надежность пароля.
string GeneratePassword (int length)
{
var bytes = new byte[length];
// Don't store and reuse a generator to avoid predictable sequences.
var generator = System.Security.Cryptography.RNGCryptoServiceProvider.Create();
generator.GetBytes(bytes);
var chars = new char[]
{
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'0','1','2','3','4','5','6','7','8','9','!','.'
};
return new string(bytes
.Select(b=>chars[b%64])
.ToArray());
}
Я выбрал 64 набора символов для сопоставления, так как это делитель 256 (так что ни один символ не будет повторяться чаще), и это выглядело как приличный баланс между безопасностью и навязыванием уродливых символов пользователю.
Любой совет можно только приветствовать, но мой вопрос таков: "Это безопасный / безопасный способ создания паролей или я пропускаю какую-то форму паттерна / слабости, которая могла бы сделать это пригодным для использования?"