Справочник по C#

    Исходники по языку программирования CSharp

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

    /
    /
    /
    129 Views


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

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

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

    0.00 (0%) 0 votes

    moyadcode13
    • Facebook
    • Twitter
    • Google+
    • Linkedin
    • Pinterest
    moyadcode10
    moyadcode11
    moyadcode9