Как правильно сгенерировать дайджест паролей WSSE на PHP

Я ищу создание REST API в Symfony2 и их Custom Authentication Provider они показывают, как построить систему аутентификации WSSE, которая должна подходить для моих нужд. Я собираюсь начать с создания и тестирования API через cURL, поэтому мне нужно иметь возможность быстро генерировать заголовки. Я нашел генератор JS, который показал нужные мне заголовки.

Из того, что я читал, дайджест паролей должен представлять собой SHA1 в кодировке base64, состоящий из одноразового номера, метки времени и пароля пользователя, объединенных вместе в указанном порядке. Я начал со следующих данных:

$nonce = '4c5625ec7af5bdff';
$timestamp = '2013-04-03T04:46:19Z';
$password = 'mypass';

и сформировал дайджест:

$digest = base64_encode(sha1($nonce.$timestamp.$password));

Я не понимаю, что для переменной $digest теперь установлено значение YTgxMDUzOWQzMDBiZmU1MmI2NWQ0YjYwNDc3ZmY5OWI3MmVlZTQyNA==, но образец PasswordDigest из генератора JS отображается как qBBTnTAL/lK2XUtgR3/5m3Lu5CQ=. Должно быть, я где-то пропустил шаг, но я не уверен, что это.


person dragonmantank    schedule 03.04.2013    source источник


Ответы (2)


Похоже, мне нужно использовать двоичный результат SHA1, а не шестнадцатеричное представление. Мой дайджест должен выглядеть так:

$digest = base64_encode(sha1($nonce.$timestamp.$password, true));
person dragonmantank    schedule 03.04.2013

Я знаю, что это старый пост, только что наткнулся на этот пост, недавно я разработал API в symfony2 с аутентификацией WSSE, и вот как я сгенерировал полный заголовок WSSE с помощью функции ниже:

public static function getWsseHeader($username, $apikey, $created, $nonce)
    {

        $digest = sha1($nonce.$created.$apikey, true);

        return sprintf(
            'X-WSSE: UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"',
            $username,
            base64_encode($digest),
            base64_encode($nonce),
            $created
        );
    }
person Rahul    schedule 15.12.2014