Генерация паролей 1С 8.3 (код, инструкция)


Инструкция по самостоятельному написанию генерации пароля в 8.3.
Может кому-нибудь пригодится, т.к. весь материал на ИС за монетку
а делать-то на самом деле нечего

Для жадных и ленивых, как я!

Всё очень просто

Цитата из справки 1С
«Длина не менее 7 символов; Содержит не менее 3-х типов символов из перечисленных ниже:
    —    Заглавные буквы;
    —    Строчные буквы;
    —    Цифры;
    —    Специальные символы;
    —    Не совпадает с именем пользователя;
    —    Не является последовательностью символов.»

Для примера я использовал только заглавные и строчные буквы латинского алфавита и цифры

Процедура Пуск()
ГСЧ = Новый ГенераторСлучайныхЧисел();
//здесь в скобках можно передать число (инициализацию последовательности случайных чисел определённым числом), а можно и не передавать (генератор случайных чисел инициализируется временем работы операционной системы с момента старта)
//Что всё это значит?
//Это значит, что для ГСЧ = Новый ГенераторСлучайныхЧисел(2024) будет своя уникальная последовательность случайных чисел и она статична.
//Если использовать код, представленный ниже, то для 2024 это последовательность "sfBjgZR" и такая последовательность будет постоянна;
//Так же для уникальности я всегда использую ТекущаяУниверсальнаяДатаВМиллисекундах(), но, повторюсь, его можно не указывать

Пароль = "";
Неиспользуемые = ":<=>?@;[]#k8SjZc9Dxk_`"; //мои исключения
Пока СтрДлина(Пароль) < 7 Цикл
НекийСимвол = Символ(ГСЧ.СлучайноеЧисло(48, 122));
//Сначала получаем число из диапазона между 48 и 122
//И получаем его символ по ASCII (см.таблицу)
Если Найти(Неиспользуемые, НекийСимвол) > 0 Тогда//проверка на исключения
Продолжить;
КонецЕсли;
Пароль = Пароль + НекийСимвол;
КонецЦикла;
Сообщить(Пароль);

КонецПроцедуры//Пуск()

 

18 Comments

  1. Ovrfox

    Не знаю, как Вам , но я не люблю многозначности.

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

    Процедура Пуск()
    ГСЧ = Новый ГенераторСлучайныхЧисел();
    
    Пароль = «»;
    ИспользуемыеСимволы = «:<=>?@;[]#k8SjZc9Dxk_`01243456789AQWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm»;
    Н = СтрДлина(ИспользуемыеСимволы );
    Пока СтрДлина(Пароль) < 7 Цикл
    НекийСимвол = Подстрока(ИспользуемыеСимволы ,(ГСЧ.СлучайноеЧисло(1, Н)),1);
    Пароль = Пароль + НекийСимвол;
    КонецЦикла;
    Сообщить(Пароль);
    
    КонецПроцедуры//Пуск()

    Показать

    Reply
  2. Ovrfox

    + В догонку. И еще мне постоянно не везет. Не хватало, чтобы у меня еще цикл назначения пароля выполнялся несколько секунд. 😉

    Reply
  3. a_titeev

    Из практики: Исключать надо больше — похожие символы — 1, l, 0, O и т.п.

    Reply
  4. odin-7610

    (3) a_titeev, +100500 постоянно проблемы с такими ситуациями

    Reply
  5. dmt

    Это те самые пароли, которые на стикерах к мониторам приклеивают? 🙂

    Reply
  6. pumbaE

    А зачем для 1с выдумывать пароли с разным регистром букв, если для авторизации в самой 1с это не важно? Все равно все приводит при проверке к верхнему регистру.

    Reply
  7. dj_serega

    (6) pumbaE, Откуда инфа? 🙂 Поделитесь, если не секрет 🙂

    Reply
  8. v3rter

    Я бы ещё исключил J, G и Q — в моей практике в них тоже путаются.

    Reply
  9. viptextil

    Вообще-то лучше не исключать неиспользуемые символы, а задать строку ДОПУСТИМЫХ символов и с помощью ГСЧ выбирать из нее.

    Reply
  10. pumbaE

    (7) dj_serega, в таблице users есть два поля, в которых два sha хранятся от паролей, второе это «Врег(Парол)». Проверяется очень просто, ставите пароль с верхним регистром, пробуете войти с теми же буквами только в нижнем регистре и в без проблем заходите.

    Reply
  11. nagaitseff

    А можно так, сделать обработку для генерации паролей

    КоличествоПаролей = 0
    ВвестиКоличество(КоличествоПаролей); //ввели количество паролей
    
    ДлинаПаролей = 0;
    ВвестиЧисло(ДлинаПаролей); // ввели длину паролей
    
    //строка из которой будем брать символы для паролей
    Алфавит = «1234567890_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV­WXYZ»; //символы для генерации паролей
    
    ГСЧ = Новый ГенераторСлучайныхЧисел(); // создаем генератор случайных чисел
    ВсеПароли = «»; //в этой строке накапливаем все пароли
    
    //организуем цикл нужное количество раз
    Для А = 1 По КоличествоПаролей Цикл
    НовыйПароль = «»; // сюда накапливаем текущий пароль
    //цикл по требуемому количеству символов
    Для Б = 1  По ДлинаПаролей Цикл
    Индекс = ГСЧ.СлучайноеЧисло(1, (СтрДлина(Алфавит));
    НовыйПароль = НовыйПароль + Сред(Алфавит, Индекс, 1);
    КонецЦикла;
    ВсеПароли = ВсеПароли + НовыйПароль + Символы.ПС;
    КонецЦикла;
    
    
    ОткрытьЗначение(ВсеПароли); // покажем пользователю все пароли
    

    Показать

    Тем самым это расширяет возможности использования символов, длину и количество паролей выбирает пользователь. Удобно.

    Информация взята с сайта Уроки 1с. Это не реклама.

    Reply
  12. Разумов

    (10) pumbaE, надо же, действительно!

    Reply
  13. v3rter

    Если задаться целью генерировать качественные пароли, то генерируем случайный пароль на три символа короче, отдельно генерируем один символ в верхнем регистре, одну цифру и один спецсимвол и вставляем каждый из них в случайную позицию промежуточного результата. Или вообще определяем минимальное количество символов из каждой группы.

    Кстати, 1С не запрещает использование пробела в качестве парольного символа, о чем любители брутфорса могут и не догадаться. Да и при использовании сложного пароля, один пробел в середине не вызовет особых неудобств, считаю.

    А еще есть русские буквы )

    Reply
  14. cargobird

    (10) pumbaE, проверил, действительно)

    На прошлой работе пару лет вводил пароль с двумя заглавными буквами в двух словах))

    Reply
  15. mootriskoff

    Из опыта создания паролей изпользую следующий метод:

    Берутся три случайный цифры, берутся первые три буквы из слов предложения для запоминания, которое может состоять из трёх и более случайных слов и любой символ синтаксиса.

    Пример: 303 Новых Кашалота Помыли Хомут ! — знак восклицания, например. Пароль будет выглядеть так: 303YjdRfiGjv{jv!

    Reply
  16. nickVZ

    С одной стороны, оно так: человек человеку друг, коллега, и змея подколодная….

    С другой — надо в планировщик задание на запуск от имени пользователя воткнуть…

    С третьей, таблица Users (условное название) и подменить можно…

    Но за мысль спасибо, схомячил.

    Reply
  17. klel@list.ru

    Спасибо за хорошую статью, взял пример Вашего кода, буду делать 😉

    Reply
  18. dour-dead
    ПользователиСлужебный.СоздатьПароль(ПользователиСлужебный.ПараметрыПароля(6, Истина))
    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *