gifts2017

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

Опубликовал Артём (Tomy82) в раздел Администрирование - Защита, права, пароли

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

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

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

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

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

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

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

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

 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Олег Родионов (Ovrfox) 22.07.16 15:42
Не знаю, как Вам , но я не люблю многозначности.
Намного проще примерно такой код с аналогичной функциональностью
Процедура Пуск()
ГСЧ = Новый ГенераторСлучайныхЧисел();

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

КонецПроцедуры//Пуск()
...Показать Скрыть
2. Олег Родионов (Ovrfox) 22.07.16 15:45
+ В догонку. И еще мне постоянно не везет. Не хватало, чтобы у меня еще цикл назначения пароля выполнялся несколько секунд. ;)
3. Артем Титеев (a_titeev) 22.07.16 17:56
Из практики: Исключать надо больше - похожие символы - 1, l, 0, O и т.п.
zqzq; alex-l19041; dj_serega; odin-7610; +4 Ответить 1
4. Антон (odin-7610) 27.07.16 08:34
(3) a_titeev, +100500 постоянно проблемы с такими ситуациями
5. Галахад (dmt) 27.07.16 08:45
Это те самые пароли, которые на стикерах к мониторам приклеивают? :-)
NazarovV; +1 Ответить
6. Евгений Сосна (pumbaE) 27.07.16 16:54
А зачем для 1с выдумывать пароли с разным регистром букв, если для авторизации в самой 1с это не важно? Все равно все приводит при проверке к верхнему регистру.
Артано; Разумов; +2 1 Ответить 1
7. Сергей Галюк (dj_serega) 27.07.16 17:32
(6) pumbaE, Откуда инфа? :) Поделитесь, если не секрет :)
8. Роберт В е р т и н с к и й (v3rter) 27.07.16 17:57
Я бы ещё исключил J, G и Q - в моей практике в них тоже путаются.
9. Виктор Пинчуков (viptextil) 28.07.16 08:45
Вообще-то лучше не исключать неиспользуемые символы, а задать строку ДОПУСТИМЫХ символов и с помощью ГСЧ выбирать из нее.
10. Евгений Сосна (pumbaE) 28.07.16 09:06
(7) dj_serega, в таблице users есть два поля, в которых два sha хранятся от паролей, второе это "Врег(Парол)". Проверяется очень просто, ставите пароль с верхним регистром, пробуете войти с теми же буквами только в нижнем регистре и в без проблем заходите.
11. Евгений Нагайцев (nagaitseff) 28.07.16 09:29
А можно так, сделать обработку для генерации паролей

КоличествоПаролей = 0
ВвестиКоличество(КоличествоПаролей); //ввели количество паролей

ДлинаПаролей = 0;
ВвестиЧисло(ДлинаПаролей); // ввели длину паролей

//строка из которой будем брать символы для паролей
Алфавит = "1234567890_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV­WXYZ"; //символы для генерации паролей

ГСЧ = Новый ГенераторСлучайныхЧисел(); // создаем генератор случайных чисел
ВсеПароли = ""; //в этой строке накапливаем все пароли

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


ОткрытьЗначение(ВсеПароли); // покажем пользователю все пароли
...Показать Скрыть


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

Информация взята с сайта Уроки 1с. Это не реклама.
12. Алексей А. (Разумов) 28.07.16 11:01
(10) pumbaE, надо же, действительно!
13. Роберт В е р т и н с к и й (v3rter) 28.07.16 11:24
Если задаться целью генерировать качественные пароли, то генерируем случайный пароль на три символа короче, отдельно генерируем один символ в верхнем регистре, одну цифру и один спецсимвол и вставляем каждый из них в случайную позицию промежуточного результата. Или вообще определяем минимальное количество символов из каждой группы.

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

А еще есть русские буквы )
dj_serega; serg_infostart; +2 Ответить
14. Даниил Матвеев (cargobird) 29.07.16 14:16
(10) pumbaE, проверил, действительно)
На прошлой работе пару лет вводил пароль с двумя заглавными буквами в двух словах))
15. mootriskoff (mootriskoff) 31.07.16 07:17
Из опыта создания паролей изпользую следующий метод:
Берутся три случайный цифры, берутся первые три буквы из слов предложения для запоминания, которое может состоять из трёх и более случайных слов и любой символ синтаксиса.
Пример: 303 Новых Кашалота Помыли Хомут ! - знак восклицания, например. Пароль будет выглядеть так: 303YjdRfiGjv{jv!
16. nickVZ (nickVZ) 20.09.16 01:13
С одной стороны, оно так: человек человеку друг, коллега, и змея подколодная....
С другой - надо в планировщик задание на запуск от имени пользователя воткнуть...
С третьей, таблица Users (условное название) и подменить можно...
Но за мысль спасибо, схомячил.