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

      Иногда возникает необходимость, быстро создать надежный пароль. Надежный пароль – это важный элементы защиты, который позволяет значительно повысить вашу безопасность. Минимальная длина пароля должна составлять не менее 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 = "0123456789";

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


Комментариев нет:

Отправить комментарий

Большая просьба, не писать в комментариях всякую ерунду не по теме!