Домой Password Генератор паролей: Справочник по C#

Генератор паролей: Справочник по C#

1162
0


      Иногда возникает необходимость, быстро создать надежный пароль. Надежный пароль – это важный элементы защиты, который позволяет значительно повысить вашу безопасность. Минимальная длина пароля должна составлять не менее 8 символов, иначе взломать его будет очень просто. Хорошим паролем считается пароль, длина которого превышает 12 символов. Так же необходимо использовать большие и маленькие буквы, а так же цифры в пароле, они только усложнят пароль для взлома.

      Дополнительную информацию вы можете получить в центре безопасности Microsoft по адресу http://www.microsoft.com/ru-ru/security/online-privacy/passwords-create.aspx.

Рассмотрим генератор паролей со следующим функционалом:

  • Генерация пароля содержащего символы латинского алфавита в различном регистре и цифры;
  • Возможность задать длину пароля через командную строку;
  • Автоматическое копирование пароля в буфер обмена.

       Создайте проект консольного приложения в 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
ЧИТАТЬ ТАКЖЕ:  Удаление приложений с помощью WMI: Справочник по C#

Ссылка для скачивания примера: Rusfolder.net

Генератор паролей: Справочник по C#

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь