Иногда возникает необходимость, быстро создать надежный пароль. Надежный пароль – это важный элементы защиты, который позволяет значительно повысить вашу безопасность. Минимальная длина пароля должна составлять не менее 8 символов, иначе взломать его будет очень просто. Хорошим паролем считается пароль, длина которого превышает 12 символов. Так же необходимо использовать большие и маленькие буквы, а так же цифры в пароле, они только усложнят пароль для взлома.
Рассмотрим генератор паролей со следующим функционалом:
- Генерация пароля содержащего символы латинского алфавита в различном регистре и цифры;
- Возможность задать длину пароля через командную строку;
- Автоматическое копирование пароля в буфер обмена.
Создайте проект консольного приложения в Microsoft Visual Studio с именем «PasswordGenerator». После создания проекта, вы перейдете в листинг вашего консольного приложения.
Автоматически у вас будет создан класс «Program» и статический метод Main. Метод Main является точкой входа консольного приложения C# или приложения Windows. При запуске приложения метод Main является первым вызываемым методом, именно в нем мы и будем вызывать метод генерации пароля. Добавьте приведенный ниже листинг после данного метода.
private int lenght = 15; //размер пароля, если длина не указана
private string PASSWORD_CHARS_EN = "abcdefgijkmnopqrstwxyzABCDEFGHJKLMNPQRSTWXYZ";
private string PASSWORD_CHARS_NUMERIC = "0
789";
public void GeneratePassword(int lenght_pass)
{
if (lenght_pass > 0)
this.lenght = lenght_pass;
System.Collections.ArrayList charGroups =
new System.Collections.ArrayList();
charGroups.Add(PASSWORD_CHARS_EN.ToCharArray());
charGroups.Add(PASSWORD_CHARS_NUMERIC.ToCharArray());
byte[] randomBytes = new byte[4];
int[] charsLeftInGroup = new int[charGroups.Count];
for (int i = 0; i < charsLeftInGroup.Length; i++)
charsLeftInGroup[i] = ((char[])charGroups[i]).Length;
int[] leftGroupsOrder = new int[charGroups.Count];
for (int i = 0; i < leftGroupsOrder.Length; i++)
leftGroupsOrder[i] = i;
System.Security.Cryptography.RNGCryptoServiceProvider rng =
new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(randomBytes);
int seed = (randomBytes[0] & 0x7f) << 24 |
randomBytes[1] << 16 |
randomBytes[2] << 8 |
randomBytes[3];
Random random = new Random(seed);
char[] password = null;
password = new char[lenght];
int nextCharIdx;
int nextGroupIdx;
int nextLeftGroupsOrderIdx;
int lastCharIdx;
int lastLeftGroupsOrderIdx = leftGroupsOrder.Length - 1;
for (int i = 0; i < password.Length; i++)
{
if (lastLeftGroupsOrderIdx == 0)
nextLeftGroupsOrderIdx = 0;
else
nextLeftGroupsOrderIdx = random.Next(0, lastLeftGroupsOrderIdx);
nextGroupIdx = leftGroupsOrder[nextLeftGroupsOrderIdx];
lastCharIdx = charsLeftInGroup[nextGroupIdx] - 1;
if (lastCharIdx == 0)
nextCharIdx = 0;
else
nextCharIdx = random.Next(0, lastCharIdx + 1);
password[i] = ((char[])charGroups[nextGroupIdx])[nextCharIdx];
if (lastCharIdx == 0)
charsLeftInGroup[nextGroupIdx] =
((char[])charGroups[nextGroupIdx]).Length;
else
{
if (lastCharIdx != nextCharIdx)
{
char temp = ((char[])charGroups[nextGroupIdx])[lastCharIdx];
((char[])charGroups[nextGroupIdx])[lastCharIdx] =
((char[])charGroups[nextGroupIdx])[nextCharIdx];
((char[])charGroups[nextGroupIdx])[nextCharIdx] = temp;
}
charsLeftInGroup[nextGroupIdx]--;
}
if (lastLeftGroupsOrderIdx == 0)
lastLeftGroupsOrderIdx = leftGroupsOrder.Length - 1;
else
{
if (lastLeftGroupsOrderIdx != nextLeftGroupsOrderIdx)
{
int temp = leftGroupsOrder[lastLeftGroupsOrderIdx];
leftGroupsOrder[lastLeftGroupsOrderIdx] =
leftGroupsOrder[nextLeftGroupsOrderIdx];
leftGroupsOrder[nextLeftGroupsOrderIdx] = temp;
}
lastLeftGroupsOrderIdx--;
}
}
copyToClipboard(new string(password));
}
private void copyToClipboard(string password)
{
//Копируем текст в буфер
System.Windows.Clipboard.SetText(password);
}
Далее необходимо вызвать метод «GeneratePassword», который генерирует пароль указанной длины и выполнит метод «copyToClipboard», а метод «copyToClipboard» сохранит данные в буфер обмена в текстовом формате. Замените полностью метод «Main» на приведенный ниже листинг:
[STAThread]
public static void Main(string[] args)
{
Program p = new Program();
if (args.Length > 0)
//генерация с числом заданным при запуске.
p.GeneratePassword(Convert.ToInt16(args[0]));
else
//генерация с минимальным длиной пароля, в 8 символов.
p.GeneratePassword(8);
}
Для проверки работоспособности вашего проекта, запустите отладку, нажав на клавиатуре, клавишу «F5». На несколько секунд вы увидите консольное окно вашего проекта, после генерации пароля, окно само закроется и в буфере обмена, будет содержаться сгенерированный пароль. Откройте любой текстовый редактор и выполните команду вставки, вы получите пароль сгенерированный программой. Время генерации и отображения окна вашего приложения, зависит от технического состояния вашего компьютера. Для создания ярлыка с программой и указанием фиксированной длиной пароля, перейдите в директорию с скомпилированным вашим проектом, по умолчанию это «Debug». Сделайте клик правой клавишей мыши по исполняемому файлу «PasswordGenerator.exe» и выберете из появившегося контекстного меню, пункт «Создать ярлык».
После создания ярлыка, перейдите в его свойства. В открывшемся окне свойств данного ярлыка, у вас по умолчанию выберется вкладка «Ярлык». В поле «Объект», в двойных кавычках, будет прописан путь и сам исполняемый файл программы. Допишите в конце строки, после кавычек, цифру, указывающую длину пароля при генерации. Нажмите кнопку «Применить» и закройте окно свойств.
Запустите программу через данный ярлык, после выполнения программы, в буфере обмена, у вас появится cгенерированный пароль с длиной указанной в ярлыке. Без указания данной цифры в ярлыке, длина пароля будет составлять 8 символов.
Примеры паролей:
- R54tY01Tw27Kq86
- W34cf78gx95Fa1
- G45JZ13Hb02Wt
- a17of89ni06s
- K34Lw82Xp01
Ссылка для скачивания примера: Rusfolder.net
0.00 (0%) 0 votes










