1C ПрограммированиеСайтостроение

1C и bCrypt шифрование

Доброго времени суток, уважаемые читатели.

Сегодня я расскажу об одном весьма интересном опыте. Потребоваль для одного проекта вести базу логинов и паролей к сайту в 1С. Да так, чтоб в базе пароли хранились не в открытом виде, а зашифрованные методом bCrypt. Ввиду того, что 1С понятия не имеет что это такое, было принято шифрование выполнять на стороне веб-сервера, а со стороны 1С вызывать web-service, передавая в качестве параметра пароль в открытом виде, а в ответ получая зашифрованную строку.

Итак реализация:

На стороне веб-сервера находится файл Service.php

<?php

    $response = array("error" => FALSE);

    if (isset($_GET['Pass'])) {
        $pass = $_GET['Pass'];
        $response["pass"] = password_hash($pass, PASSWORD_BCRYPT);
    } else {
        $response["error"] = TRUE;
        $response["error_msg"] = "Требуемый параметр не обнаружен!";
    }

    echo json_encode($response, JSON_UNESCAPED_UNICODE);

?>

При вызове данного сервиса ожидается передача параметра Pass — методом GET, который содержит пароль в чистом виде. Сервис шифрует его и возвращает в формате JSON ответ, содержащий информацию об ошибке или ее осутствии и хеш пароля, который вернула функция шифрования.

выглядит это следующим образом:

Вызываем сервис http://hotel.skalnyy.com/api/Service.php без указания параметра Pass, получаем ответ:

{"error":true,"error_msg":"Требуемый параметр не обнаружен!"}

Вызываем сервис http://hotel.skalnyy.com/api/Service.php?Pass=123 указывая параметру Pass пароль, который мы хотим зашифровать, получаем ответ:

{"error":false,"pass":"$2y$10$rIr6t8EHjwiSdGwsy1SABea2AHYPq0G5F4Wa.kH4EvnEZdw.Hrzce"}

 

на стороне 1С:7.7:

<< Продолжение следует… >>