Tuesday, July 29, 2014

Генератор паролей в 1С с проверкой сложности

Задали мне задачку импортировать пользователей в Битрикс с требование генерации сложных паролей с 1С. Импорт с Битрикс отдельная тема, а вот сложные пароли и их валидность опишу тут.
Фактически требование сводилось к мин количеству символов = 8, должны быть буквы нижнего и верхнего регистра, цифры и спец. символы.
Вот что из этого получилось:

Функция СгенерироватьПароль(МинДлинаПароля=8, СложныйПароль=Истина)
 ПарольВалиден = Ложь;
 
 Пока НЕ ПарольВалиден Цикл
  ГСЧ = Новый ГенераторСлучайныхЧисел(Секунда(ТекущаяДата()));
  ТПароль = СтрЗаменить(Строка(Новый УникальныйИдентификатор()),"-","");
  
  Если не СложныйПароль тогда
   Возврат Лев(ТПароль,МинДлинаПароля);
  Иначе
   НобходимыеСимволяДляСложности = ".,<>/?;:'[]{}\`~!@#$%^&*()-_+=";
   МаксСимволов  =  МинДлинаПароля+ГСЧ.СлучайноеЧисло(0,4);
   ТПароль = Лев(ТПароль,МаксСимволов);
   Для Сим=1 по МаксСимволов Цикл
    Если Сим>1 И Булево(ГСЧ.СлучайноеЧисло(0,1)) И Найти(НобходимыеСимволяДляСложности,Сред(ТПароль,Сим-1,1))=0 тогда
     ТПароль = Лев(ТПароль,Сим)+Сред(НобходимыеСимволяДляСложности,ГСЧ.СлучайноеЧисло(0,30),1)+Сред(ТПароль,Сим+1);
     Сим = Сим+1;
     ТПароль = Сред(ТПароль,1,МаксСимволов);
    КонецЕсли;
    Если Булево(ГСЧ.СлучайноеЧисло(0,1)) тогда
     ТПароль = Лев(ТПароль,Сим-1)+ВРег(Сред(ТПароль,Сим,1))+Сред(ТПароль,Сим+1);
    КонецЕсли;
   КонецЦикла;
  КонецЕсли;
  
  //Проверка валидности пароля
  //((?=.*[a-z])(?=.*\d)(?=.*[\.,<>/\?;:'\[\]\{\}\\`~!@#$%^&*()-_+=])(?=.*[A-Z]).{6,})
  
  RegExp = Новый COMОбъект("VBScript.RegExp");
  //СтруктураФайлов = Новый СписокЗначений;
  RegExp.MultiLine = Истина; // истина — текст многострочный, ложь — одна строка 
  RegExp.Global = Истина; // истина — поиск по всей строке, ложь — до первого совпадения 
  RegExp.IgnoreCase = Ложь; // истина — игнорировать регистр строки при поиске 
  RegExp.Pattern = "^((?=.*[a-z])(?=.*\d)(?=.*[\.,<>/\?;:'\[\]\{\}\\`~!@#$%^&\*()-_+=])(?=.*[A-Z]).{8,})$";
  ПарольВалиден = RegExp.Test(ТПароль);
 КонецЦикла;
 Возврат ТПароль;
КонецФункции

No comments:

Post a Comment