Я хочу створити генератор випадкових паролів у веб-додатку 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))
Однак, це надзвичайно дивно, що ви:
- Введення ідентифікатора користувача та перетворення це до ланцюжка (я припускаю це є a номер)
- Розбір цієї рядки назад до числа
- Використовуючи цей номер як в довжина вашого пароля
Якщо ваш ідентифікатор користувача, скажімо, 345678, ви створюєте пароль, який містить 345 678 символів! Будь ласка, перевірте логіку програми.
1 для відповіді № 3
Перевірте таке посилання для генератора паролів у 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;
}
Відвідайте тут щоб переглянути повний приклад.