Генератор паролей в Excel
Сегодня мы создаем генератор паролей в Excel.
Зачем нам это нужно?
Генератор паролей нужен для быстрого создания устойчивых паролей заданной длины.
Конечно, можно придумать пароль и самому, и даже длинный и даже сложный, но наша задача, сделать это в Excel. Это хороший комплексный практический пример, в ходе работы над которым, мы задействуем функции: СЛУЧМЕЖДУ, ИНДЕКС, СЦЕПИТЬ, СИМВОЛ и логическую функцию ЕСЛИ. Так же мы используем элементы управления «Флажок» и «Переключатель».
В основе нашей разработки будет лежать генератор случайных чисел, представленный в Excel функцией =СЛЧИС(), и в частности его разновидность — функция =СЛУЧМЕЖДУ(нижн_граница; верхн_граница), которая возвращает случайное число между двумя заданными. Соответственно нижней и верхней границей числового диапазона.
В дополнение к этой функции можно использовать функцию =СИМВОЛ(число), которая возвращает знак в соответствии с заданным кодом (от 1 до 255) используя таблицу знаков (ANSI).
Например, чтобы сгенерировать случайным образом латинские заглавные буквы, достаточно применить формулу:
=СИМВОЛ(СЛУЧМЕЖДУ(65;90))
Где 65 и 90 соответственно нижняя и верхняя граница диапазона чисел кода, которому соответствуют заглавные латинские буквы A-Z по таблице знаков ANSI.
Для того чтобы получить шестизначный пароль из заглавных латинских букв необходимо использовать функцию =СЦЕПИТЬ(текст1; текст2;…), которая объединяет несколько текстовых строк в одну. В нашем случае это будет выглядеть так:
=СЦЕПИТЬ(СИМВОЛ(СЛУЧМЕЖДУ(65;90));СИМВОЛ(СЛУЧМЕЖДУ(65;90));СИМВОЛ(СЛУЧМЕЖДУ(65;90));СИМВОЛ(СЛУЧМЕЖДУ(65;90));СИМВОЛ(СЛУЧМЕЖДУ(65;90));СИМВОЛ(СЛУЧМЕЖДУ(65;90)))
Нажимая клавишу F9, генерируем пароли вида: MFVYZW, YHCLSD, BNLXEW и т.д.
Однако этот простой способ имеет ряд недостатков. Например, набор необходимых нам символов для пароля в таблице знаков может располагаться в несмежных, диапазонах. Так цифры от 0 до 9 имеют код 48 до 57, строчные латинские буквы – код с 97 до 122. Если мы захотим составить пароль из цифр, и латинских букв с разным регистром или захотим исключить сходные по написанию буквы (например, строчную l и заглавную I) то столкнёмся с определенными трудностями в использовании приведенного выше метода.
Методом свободным от указанных недостатков будет создание собственной таблицы символов.
Здесь мы можем располагать символы в необходимом нам порядке, например, в соответствии с возрастающей сложностью пароля, исключать схожие по написанию символы и использовать определённый набор спецсимволов.
Для этого мы будем использовать функцию =ИНДЕКС(массив; номер_строки; [номер столбца]), которая возвращает значение элемента таблицы или массива, заданного номером строки и номером столбца.
В нашем случае массивом будет одномерная таблица символов из одного столбца и количеством строк по числу используемых нами символов.
В файле примера данная таблица располагается в диапазоне А1:А86, при чем цифры от 0 до 9 занимают диапазон А1:А10, латинские строчные буквы – диапазон А11:А35, латинские заглавные буквы – диапазон А36:А60, набор спецсимволов – диапазон А61:А86. Строчная l и заглавная I исключены.
По умолчанию, наш генератор будет генерировать пароли, состоящие из цифр и строчных латинских букв, далее мы добавим возможность повысить стойкость пароля путем учета регистра, то есть добавим заглавные буквы и, в конце концов, добавим спецсимволы.
Так же, мы добавим возможность выбора длины пароля – 6, 8, 10, 12 символов.
Для удобства, присвоим нашей таблице символов находящейся в диапазоне А1:А86 имя «таблица_символов».
Итак, для генерации случайного знака из набора цифр и строчных латинских букв формула будет выглядеть следующим образом:
=ИНДЕКС(таблица_символов;СЛУЧМЕЖДУ(1;35);1)
Для генерации случайного знака из набора цифр, строчных и заглавных латинских букв:
=ИНДЕКС(таблица_символов;СЛУЧМЕЖДУ(1;60);1)
Для генерации случайного знака из набора цифр, строчных и заглавных латинских букв, а также спецсимволов:
=ИНДЕКС(таблица_символов;СЛУЧМЕЖДУ(1;86);1)
Эта формула возвращает символ, находящийся в выбранной случайным образом строке нашего массива состоящего из 1 столбца и 86 строк.
Теперь добавим механизм выбора сложности пароля. Для этого мы будем использовать элемент управления «Флажок», который в установленном положении принимает значение ИСТИНА.
Добавим в нашу форму два флажка, для двух дополнительных уровней сложности пароля. Установка первого флажка будет добавлять учет регистра (добавлять заглавные латинские буквы), установка второго флажка будет добавлять учет регистра и спецсимволов.
Добавить флажок на лист можно через вкладку Разработчик→ группа Элементы управления→ команда Вставить→ Элементы управления формы → Флажок
Установим связь первого флажка с ячейкой Е7, а связь второго флажка – с ячейкой Е8.
Установить связь можно щелкнув правой кнопкой мыши на элементе управления и, в появившемся контекстном меню выбрать пункт Формат объекта → вкладка Элемент управления→ поле Связь с ячейкой.
Тогда формула выбора знака случайным образом с учетом сложности пароля будет выглядеть следующим образом:
=ИНДЕКС(таблица_символов;ЕСЛИ($E$8=ИСТИНА;СЛУЧМЕЖДУ(1;86);ЕСЛИ($E$7=ИСТИНА;СЛУЧМЕЖДУ(1;60);СЛУЧМЕЖДУ(1;35)));1)
Это генерация только одного знака, а мы задались целью сделать 4 варианта – 6, 8, 10, и 12 символов.
Для того, чтобы не повторять эту формулу 36 раз в одной ячейке (длина пароля в нашем примере 6, 8, 10, 12 символов, соответственно все варианты 6+8+10+12=36), введем ее в 12 разных ячеек, которые потом будем сцеплять. У нас это будет диапазон В1:М1.
Теперь при каждом нажатии клавиши F9 мы будем получать 12 различных знаков, находящихся в 12 разных ячейках.
Для управления длиной пароля, мы будем использовать элемент управления «Переключатель», который в отличие от «Флажка» может принимать только одно из возможных значений среди таких же элементов управления. Флажок может быть, как снят, так и установлен.
Добавим в нашу форму четыре переключателя, соответствующие длине пароля в 6, 8, 10 или 12 символов, и установим связь этих переключателей с ячейкой Е10.
Тогда в итоговой ячейки вывода пароля будет следующая формула:
=ЕСЛИ($E$10=1;СЦЕПИТЬ(B1;C1;D1;E1;F1;G1);ЕСЛИ($E$10=2;СЦЕПИТЬ(B1;C1;D1;E1;F1;G1;H1;I1);ЕСЛИ($E$10=3;СЦЕПИТЬ(B1;C1;D1;E1;F1;G1;H1;I1;J1;K1);СЦЕПИТЬ(B1;C1;D1;E1;F1;G1;H1;I1;J1;K1;L1;M1))))
Далее выполняем некоторые организационные мероприятия для защиты листа и придания ему надлежащего вида. С этой целью, мы устанавливаем защиту ячеек на всем листе, кроме ячеек Е7, Е8 и Е10 (там где меняются параметры, связанные с установкой флажков и переключателей). Все наши вспомогательные данные на листе красим в белый цвет (теперь у нас не видно ни нашу таблицу символов, ни поля генерации знаков пароля), убираем линии сетки на вкладке Вид и устанавливаем защиту листа.
Скрыть данные на листе можно, также, другим способом. Формат ячеек, вкладка Число, выбираем Все форматы, справа а поле Тип ставим три знака точки с запятой «;;;» и нажимаем ОК.
В учебном примере на защиту листа пароля нет, и чтобы посмотреть устройство файла нужно просто снять защиту листа на вкладке Рецензирование.
Comments are currently closed.