«Скажи пароль» или как работать со свойством СохраняемоеЗначениеПароля объекта типа ПользовательИнформационнойБазы
Америку открывать никому не собираюсь, но как это ни странно, после получаса блуждания по просторам интернета я так и не нашёл конкретного описания, как можно сравнить введённый пароль с паролем текущего пользователя без его модификации (как это, например, реализовано в публикации 102655).
На деле всё оказалось довольно просто. В справке к свойству СохраняемоеЗначениеПароля объекта типа ПользовательИнформационнойБазы написано:
Содержит хранимые значения пароля (хеш-функции) и хранимые значения пароля в верхнем регистре (хеш-функции) разделенные запятой.
Только не указано, какие конкретно для этого используются хэш-функции. Для значения пароля «Привет» свойство содержит строку «KAWujn4S8YITX5L7kIQ7sQgNO+g=,c9a04UjoS/W0iLeU7GUa9/Ltd1E=».
Немного покопавшись в «сети», можно найти такую формулировку «sha-1, обёрнутый в base64». Складывая всё вместе, выводим следующий алгоритм:
Проверяем на нашем пароле «Привет» и убеждаемся, что получившееся значение действительно совпадает с левой частью из сохраненного хеша.
Дальше с помощью функции получаем текущее значение свойства СохраняемоеЗначениеПароля, не забывая установить привилегированный режим (т.к. «доступно только пользователю с административными правами»), декомпозируем его на регистрозависимую (слева от запятой) и регистронезависимую (справа) части и сравниваем полученные значения.
Вуаля! Ну, и на последок приведу еще функцию, формирующую значение свойства СохраняемоеЗначениеПароля из введенного пароля.
Специальные предложения
Как-то у вас получилось одевание штанов через голову. Не проще ли программно получать сохраняемое значение пароля и сравнивать его с хранимым в базе?
Не учитывается незаполненный пароль, для него сохраняемое значение пароля равно «».
Для себя когда-то сделал обработку (см. вложение).
Также в БП что-то похожее есть в модуле
ЭлектроннаяПодписьВМоделиСервисаСлужебный
(2) bonv, за конструктивную критику о проверке на пустое значение благодарствую, в код добавил коррективы.
А вот про «одевание штанов через голову» давайте разберём, у кого же оно получилось «через голову».
Во-вторых, я совершенно не понял фразы «не проще ли программно получать сохраняемое значение пароля». А я его аппаратно что-ли получаю?
Ну, и в-четвёртых, почему я не стал оборачивать этот код в обработку, а написал в статье? Потому что если внимательно почитать справку, а потом ещё внимательно почитать мою статью, для получения значения СохраняемоеЗначениеПароля необходимы административные права, а соответственно большинство пользователей использовать эту функцию через обработку не смогут, а установка привилегированного режима во внешней обработке бессмысленна. Соответственно делать это нужно во внутренних механизмах конфигурации, идеально для этого подходят общие формы. Поэтому публикация оформлена в виде статьи, а не обработки (как в Вашем случае).