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


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

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

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

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

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

Процедура Пуск()
ГСЧ = Новый ГенераторСлучайныхЧисел();
//здесь в скобках можно передать число (инициализацию последовательности случайных чисел определённым числом), а можно и не передавать (генератор случайных чисел инициализируется временем работы операционной системы с момента старта)
//Что всё это значит?
//Это значит, что для ГСЧ = Новый ГенераторСлучайныхЧисел(2026) будет своя уникальная последовательность случайных чисел и она статична.
//Если использовать код, представленный ниже, то для 2026 это последовательность "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 не будет опубликован. Обязательные поля помечены *