Статья Автор: Деникина Н.В., Деникин А.В.

Генератор паролей

ASP.NET Web Forms · ПрактикаЗанятие 2.7
SilverTests.ru · УчебникГенератор паролей — задание
Генератор паролей

Практическое задание: новые элементы — DropDownList, CheckBox, Random


🎯 Что нужно сделать

Создать страницу-генератор паролей. Пользователь выбирает длину из выпадающего списка, ставит галочки (цифры, спецсимволы, заглавные буквы) и нажимает кнопку. Появляется случайный пароль и оценка его надёжности.

1Новое в этом задании
Что нового Элемент / класс Зачем
Выпадающий список asp:DropDownList Выбор длины пароля
Флажки asp:CheckBox Включить цифры / символы / заглавные
Генерация случайных чисел Класс Random Выбирать случайный символ
DropDownList — это выпадающий список (в HTML — <select>). В отличие от TextBox, пользователь не вводит текст, а выбирает один из заранее заданных вариантов. Получить выбранное значение из C#: ddl.SelectedValue.
CheckBox — это флажок (галочка). В отличие от RadioButton, можно включить сколько угодно одновременно. Проверить из C#: chk.Checkedtrue если включён.
Random — класс для генерации случайных чисел. Создаёшь один раз: Random rnd = new Random();, а потом вызываешь rnd.Next(10) — случайное число от 0 до 9.

2Образец
localhost:5000/Password.aspx

Генератор паролей

Заглавные (A-Z) Цифры (0-9) Символы (!@#)
kR7nBx2mPqL4jT9w
Надёжность: сильный

3Что должно работать
  • Выпадающий список с вариантами длины: 6, 8, 12, 16, 20
  • Три флажка: заглавные буквы, цифры, спецсимволы
  • Кнопка «Сгенерировать» — создаёт случайный пароль указанной длины
  • Базовый набор символов — строчные буквы (a-z), всегда включён
  • Каждый включённый флажок добавляет свои символы в набор
  • Результат показывается крупным моноширинным шрифтом
  • Под паролем — оценка надёжности: «слабый» (6 символов), «средний» (8–12), «сильный» (16+)
  • Надёжность раскрашена: слабый — красный, средний — золотой, сильный — зелёный

4Поиграй с готовой версией

Генератор паролей

 
 

5Какие элементы понадобятся
Что Элемент Свойство для чтения
Выбор длины asp:DropDownList ddlLength.SelectedValue
Флажок «Заглавные» asp:CheckBox chkUpper.Checked
Флажок «Цифры» asp:CheckBox chkDigits.Checked
Флажок «Символы» asp:CheckBox chkSymbols.Checked
Кнопка asp:Button OnClick
Пароль (результат) asp:Label lblPassword.Text
Надёжность asp:Label lblStrength.Text

6Подсказки (раскрывай по одной)
Подсказка 1: как создать DropDownList с вариантами

Внутри DropDownList перечисляем варианты через asp:ListItem:

<asp:DropDownList ID="ddlLength" runat="server">
<asp:ListItem Value="6">6</asp:ListItem>
<asp:ListItem Value="8" Selected="True">8</asp:ListItem>
<asp:ListItem Value="12">12</asp:ListItem>
<asp:ListItem Value="16">16</asp:ListItem>
<asp:ListItem Value="20">20</asp:ListItem>
</asp:DropDownList>

Selected="True" у варианта «8» — он будет выбран при открытии. Value — то, что придёт в C# при чтении ddlLength.SelectedValue.

Подсказка 2: как создать CheckBox

CheckBox — элемент с галочкой. Не путай с RadioButton — у CheckBox'ов не нужен GroupName, потому что они независимы друг от друга:

<asp:CheckBox ID="chkUpper" runat="server"
Text="Заглавные (A-Z)" Checked="true" />
<asp:CheckBox ID="chkDigits" runat="server"
Text="Цифры (0-9)" Checked="true" />
<asp:CheckBox ID="chkSymbols" runat="server"
Text="Символы (!@#)" />

Checked="true" — галочка стоит при открытии. В C# проверяем: chkUpper.Checked вернёт true или false.

Подсказка 3: как собрать набор символов

Начинаем с базового набора (строчные буквы), потом добавляем если галочка включена:

string chars = "abcdefghijklmnopqrstuvwxyz";
 
if (chkUpper.Checked)
chars += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if (chkDigits.Checked)
chars += "0123456789";
if (chkSymbols.Checked)
chars += "!@#$%&*?";

Теперь в строке chars лежит весь «алфавит», из которого будем выбирать символы.

Подсказка 4: как получить длину из DropDownList

SelectedValue возвращает строку, а нам нужно число:

int length = int.Parse(ddlLength.SelectedValue);

Здесь можно использовать простой int.Parse без TryParse — потому что пользователь выбирает из списка, где только числа. Он не может вручную ввести «горячо».

Подсказка 5: как генерировать случайный пароль

Класс Random — генератор случайных чисел. rnd.Next(N) возвращает случайное число от 0 до N-1. Используем его как индекс символа:

Random rnd = new Random();
string password = "";
 
for (int i = 0; i < length; i++)
{
int index = rnd.Next(chars.Length); // 0..длина-1
password += chars[index]; // берём символ
}
 
lblPassword.Text = password;

chars.Length — количество символов в наборе. chars[index] — символ на позиции index. Цикл повторяется столько раз, какую длину выбрал пользователь.

Подсказка 6: как оценить надёжность и раскрасить
if (length <= 6)
{
lblStrength.Text = "Надёжность: слабый";
lblStrength.ForeColor = System.Drawing.Color.Red;
}
else if (length <= 12)
{
lblStrength.Text = "Надёжность: средний";
lblStrength.ForeColor = System.Drawing.Color.Orange;
}
else
{
lblStrength.Text = "Надёжность: сильный";
lblStrength.ForeColor = System.Drawing.Color.Green;
}

Помнишь ForeColor из прошлого задания? Тот же приём.


7Полное решение
Показать решение целиком
Password.aspx
1<%@ Page Language="C#" CodeBehind="Password.aspx.cs"
2 Inherits="MyFirstSite.Password" %>
3
4<!DOCTYPE html>
5<html>
6<head><title>Генератор паролей</title></head>
7<body>
8 <form id="form1" runat="server">
9
10 <h2>Генератор паролей</h2>
11
12 <p>Длина:
13 <asp:DropDownList ID="ddlLength" runat="server">
14 <asp:ListItem Value="6">6</asp:ListItem>
15 <asp:ListItem Value="8" Selected="True">8</asp:ListItem>
16 <asp:ListItem Value="12">12</asp:ListItem>
17 <asp:ListItem Value="16">16</asp:ListItem>
18 <asp:ListItem Value="20">20</asp:ListItem>
19 </asp:DropDownList>
20 </p>
21
22 <p>
23 <asp:CheckBox ID="chkUpper" runat="server"
24 Text="Заглавные (A-Z)" Checked="true" />
25 <asp:CheckBox ID="chkDigits" runat="server"
26 Text="Цифры (0-9)" Checked="true" />
27 <asp:CheckBox ID="chkSymbols" runat="server"
28 Text="Символы (!@#)" />
29 </p>
30
31 <asp:Button ID="btnGenerate" runat="server"
32 Text="Сгенерировать"
33 OnClick="BtnGenerate_Click" />
34
35 <p><asp:Label ID="lblPassword" runat="server"
36 Font-Size="20px" Font-Name="Consolas" /></p>
37 <p><asp:Label ID="lblStrength" runat="server" /></p>
38
39 </form>
40</body></html>

стр 13–19 — DropDownList с пятью вариантами. Selected="True" у «8» — значение по умолчанию.

стр 23–28 — три независимых CheckBox. Два включены по умолчанию (Checked="true").

стр 36Font-Size и Font-Name прямо в разметке — чтобы пароль был крупным и моноширинным.

Password.aspx.cs
1using System;
2using System.Drawing;
3
4namespace MyFirstSite
5{
6 public partial class Password : System.Web.UI.Page
7 {
8 protected void BtnGenerate_Click(object sender, EventArgs e)
9 {
10 // 1. Собираем набор символов
11 string chars = "abcdefghijklmnopqrstuvwxyz";
12
13 if (chkUpper.Checked)
14 chars += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
15 if (chkDigits.Checked)
16 chars += "0123456789";
17 if (chkSymbols.Checked)
18 chars += "!@#$%&*?";
19
20 // 2. Получаем длину
21 int length = int.Parse(ddlLength.SelectedValue);
22
23 // 3. Генерируем пароль
24 Random rnd = new Random();
25 string password = "";
26
27 for (int i = 0; i < length; i++)
28 {
29 int index = rnd.Next(chars.Length);
30 password += chars[index];
31 }
32
33 lblPassword.Text = password;
34
35 // 4. Оценка надёжности
36 if (length <= 6)
37 {
38 lblStrength.Text = "Надёжность: слабый";
39 lblStrength.ForeColor = Color.Red;
40 }
41 else if (length <= 12)
42 {
43 lblStrength.Text = "Надёжность: средний";
44 lblStrength.ForeColor = Color.Orange;
45 }
46 else
47 {
48 lblStrength.Text = "Надёжность: сильный";
49 lblStrength.ForeColor = Color.Green;
50 }
51 }
52 }
53}

стр 11–18 — начинаем с a-z, потом дописываем символы в зависимости от галочек. Строка chars растёт.

стр 21int.Parse без TryParse — безопасно, потому что значение приходит из DropDownList, там только числа.

стр 24 — создаём генератор. new Random() — достаточно одного на весь метод.

стр 29rnd.Next(chars.Length) — случайное число от 0 до длины строки минус 1.

стр 30chars[index] — символ строки по индексу. Строка в C# — это массив символов.


8Если получилось — попробуй улучшить
  • При каждом нажатии кнопки генерировать сразу три пароля для выбора
  • Учитывать количество включённых галочек в оценке надёжности (8 символов + все галочки = «сильный»)
  • Добавить кнопку «Скопировать» — подсказка: Page.ClientScript.RegisterStartupScript
  • Показывать, сколько комбинаций возможно: длина набора в степени длины пароля (Math.Pow)
  • Добавить флажок «Без похожих символов» — исключить 0/O, 1/l/I, чтобы пароль было легче переписать

Что мы потренировали

DropDownList — выпадающий список с ListItem, чтение через .SelectedValue. CheckBox — флажки, чтение через .Checked. Класс Random — генерация случайных чисел (rnd.Next(N)). Обращение к символу строки по индексу: chars[i]. Наращивание строки в цикле: password += chars[index]. Установка ForeColor в зависимости от логики. Свойства шрифта в разметке: Font-Size, Font-Name.

На следующем занятии: подключаем базу данных — храним данные, которые не исчезают при перезагрузке.

© SilverTests.ru · ASP.NET Web Forms · Практика · Генератор паролей
Печать