Проблемы с вычислением общего секрета ключа Диффи Хеллмана для OpenID

Я пытаюсь создать библиотеку с отслеживанием состояния для OpenID, которая будет использоваться в качестве плагина Wordpress, я сталкиваюсь с проблемой, когда пытаюсь вычислить секретное значение с помощью функции openssl openssl_dh_compute_key. Любопытно, есть ли у кого-нибудь шаги, которые я мог бы попробовать, подсказки и т. д.

Спасибо!

Константы...

const DH_DEFAULT_PRIME = "dcf93a0b883972ec0e19989ac5a2ce310e1d37717e8d9571bb7623731866e61ef75a2e27898b057f9891c2e27a639c3f29b60814581cd3b2ca3986d2683705577d45c2e7e52dc81c7a171876e5cea74b1448bfdfaf18828efd2519f14e45e3826634af1949e5b535cc829a483b8a76223e5d490a257f05bdff16f2fb22c583ab";
const DH_DEFAULT_GENERATOR = '02';

Создание моего ключа Диффи-Хеллмана

private function createDHKey($priv_key = false) {
    if (!$priv_key) {
        $details = array();
        $details['p'] = pack('H*', self::DH_DEFAULT_PRIME);
        $details['g'] = pack('H*', self::DH_DEFAULT_GENERATOR);
        $this->dh = openssl_pkey_new(array(
            'dh' => $details,
        ));
        if ($this->dh) {
            return true;
        } else {
            error('OpenSSL failed to export your private key, ensure you have a valid configuration file, and PHP can find it.');
        }
    } else {
        $this->dh = openssl_pkey_get_private($priv_key);
        return false;
    }
}

First run of function

Recalling exported private key

Ag== на кнопке обоих изображений представляет собой закодированное в base64 значение dh['g'].

Затем я сохраняю сгенерированный закрытый ключ в базе данных для сохранения, что позволяет мне позже воссоздать ключ с помощью функции openssl_pkey_get_private.

Однако получение возвращенного openid.dh_server_public из запроса на ассоциацию и его передача, а также мой ключ, воссозданный из закрытого ключа, приводит к ложному результату для

var_dump(openssl_dh_compute_key($this->op_pubkey, $this->dh));

5
задан Jamie 19 June 2012 в 13:28
поделиться