gpt4 book ai didi

php - 计算 OpenID 的 Diffie Hellman key 的共享 secret 的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:39:23 25 4
gpt4 key购买 nike

我正在尝试为 OpenID 创建一个有状态库以用作 Wordpress 插件,当我尝试使用 openssl 函数 openssl_dh_compute_key 计算 secret 值时遇到问题.好奇是否有人有一些我可以尝试的步骤、提示等...

谢谢!

常量...

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

创建我的 Diffie-Hellman key

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==都是dh['g']的base64编码值。

然后我将生成的私钥保存到数据库中以保存,这允许我稍后通过 openssl_pkey_get_private 函数重新创建 key 。

但是,从关联请求中获取返回的 openid.dh_server_public 并传递它,我的 key 从私钥重新创建导致错误

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

最佳答案

好吧,你知道他们怎么说稍后再回来解决问题。我所有的“个人”代码都很好,这是对 openssl_dh_compute_key 对公钥的期望以及 OP 的公钥如何传递的误解......

dh_server_public
Value: base64(btwoc(g ^ xb mod p))
Description: The OP's Diffie-Hellman public key.

因此,当我第 4 次或第 5 次重新阅读它时,它终于发出了咔嗒声。

“嘿,如果我的 key 是二进制形式,我敢打赌 openssl 函数需要二进制……”

因此,额外缺少的步骤最终变成了 base64 解码...

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

关于php - 计算 OpenID 的 Diffie Hellman key 的共享 secret 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11090231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com