/ / генератор паролів в c # - c #, asp.net

генератор паролів в c # - c #, asp.net

Я хочу створити генератор випадкових паролів у веб-додатку ASP.NET C #.

Я створив це, але він застосовний тільки для цілого формату. Якщо я даю будь-які символи, вона показує помилку налагодження, оскільки "мій формат введення неправильний".

Але я хочу ввести як рядок, так і ціле число. Наприклад, моє поле поля може бути

dft-001

Я хочу випадковий пароль для цього значення, а також моя довжина повинна бути обмежена лише 8 цифрами або символами.

Мій поточний код:

public static string CreateRandomPassword(int PasswordLength)
{

string _allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789-";
Random randNum = new Random();
char[] chars = new char[PasswordLength];
int allowedCharCount = _allowedChars.Length;

for (int i = 0; i < PasswordLength; i++)
{
chars[i] = _allowedChars[(int)((_allowedChars.Length) * randNum.NextDouble())];
}

return new string(chars);
}


protected void Button1_Click(object sender, EventArgs e)
{
userid.Text = "Your id is:     " + id.Text;
if(id .Text!="")
{

string myInt = id.Text.ToString();
password.Text = "Your password is: " + CreateRandomPassword(int.Parse(myInt));
}
}

Відповіді:

4 для відповіді № 1

Є кілька речей, які ви можете зробити, щоб виправити це на основі того, що ви вказали у своїх вимогах.

public static string CreateRandomPassword()  //If you are always going to want 8 characters then there is no need to pass a length argument
{
string _allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789-";
Random randNum = new Random((int)DateTime.Now.Ticks);  //Don"t forget to seed your random, or else it won"t really be random
char[] chars = new char[8];
//again, no need to pass this a variable if you always want 8

for (int i = 0; i < 8; i++)
{
chars[i] = _allowedChars[randNum.Next(_allowedChars.Length)];
//No need to over complicate this, passing an integer value to Random.Next will "Return a nonnegative random number less than the specified maximum."
}
return new string(chars);
}


protected void Button1_Click(object sender, EventArgs e)
{
userid.Text = "Your id is:     " + id.Text;
if(id .Text!="")
{
password.Text = "Your password is: " + CreateRandomPassword();
}
}

Якщо я зрозуміла, що ти хочеш правильно робити, то це повинно забрати вас туди.

Ref: MSDN Random.Next


3 для відповіді № 2

Не треба:

password.Text = CreateRandomPassword(int.Prase(myInt))

Однак, це надзвичайно дивно, що ви:

  1. Введення ідентифікатора користувача та перетворення це до ланцюжка (я припускаю це є a номер)
  2. Розбір цієї рядки назад до числа
  3. Використовуючи цей номер як в довжина вашого пароля

Якщо ваш ідентифікатор користувача, скажімо, 345678, ви створюєте пароль, який містить 345 678 символів! Будь ласка, перевірте логіку програми.


1 для відповіді № 3

Перевірте таке посилання для генератора паролів у asp.net

Генератор паролів у ASP.NET


1 для відповіді № 4

Залежно від того, наскільки швидко функція називається кілька разів, паролі виглядатимуть схожими, якщо ви використовуєте Random як локальна змінна (навіть при використанні Ticks як насіння). Рішенням для цього є використання його як static змінна, щоб переконатися, що результат справді випадковий.

private static Random rand = new Random();

Інший варіант - використання вбудованих .net-рішень, таких як Path.GetRandomFileName() що дасть вам такі результати

// w143kxnu.idj

Використовуйте лише перші 8 символів і довільно змініть деякі символи Upper().


0 для відповіді № 5

Зміна методу Button_Click на наступне дасть вам випадковий пароль з 8 символів:

static const int PASSWORD_LENGTH = 8;
protected void Button1_Click(object sender, EventArgs e)
{
userid.Text = "Your id is:     " + id.Text;
if(id .Text!="")
{

string myInt = id.Text.ToString();
password.Text = "Your password is: " + CreateRandomPassword(PASSWORD_LENGTH);
}
}

Інакше якщо id.Text Взагалі містить будь-які літери, воно вийде з ладу, що, швидше за все, є помилкою, яку ви отримуєте.


0 для відповіді № 6

Існує 2 проблеми. Спочатку id.Text.ToString() може містити декілька символів, які не можуть бути проаналізовані int. "helo123" не може бути проаналізовано безпосередньо в int.Це призводить до того, що "формат введення неправильний". Вам слід робити це лише у тому випадку, якщо ви впевнені, що ідентифікатор містить лише номери.

По-друге, CreateRandomPassword(int.Parse(myInt)) створює пароль, який до тих пір, поки значення id. Ти повинен CreateRandomPassword(10) або CreateRandomPassword(randNum.Next(5, 12)). Якщо ваш ідентифікатор становить 500, ваш пароль буде довжиною 500 символів, а якщо ваше поле має бути 32 символами, це може призвести до невдачі, коли "формат введення неправильний".


0 для відповіді № 7

Спочатку ми приймаємо 6 (будь-які) випадкові числа з "0123456789".

Потім ми створюємо функцію, яка повертає випадкове число.

private string GetRandomNumber()
{
var chars = "0123456789";
var random = new Random();
var result = new string(
Enumerable.Repeat(chars, 6)
.Select(s => s[random.Next(s.Length)])
.ToArray());
return result;
}

Відвідайте тут щоб переглянути повний приклад.