【发布时间】:2019-05-20 13:43:02
【问题描述】:
openssl_dh_compute_key() 让我觉得 OpenSSL 不是 ECDH。它只谈论DH,而不是ECDH。此外,公钥基本上只是 base-256 中的一个素数,并且有关于如何删除公钥的 -----BEGIN PUBLIC KEY----- 部分的具体说明,好像不支持一样。另外,从技术上讲,以 -----BEGIN PUBLIC KEY----- 开头的字符串是有效的 base-256 数字。
假设 ECDH 密钥与 ECDSA 密钥相同,那么 ECDH 的公钥由 X、Y 坐标和曲线(无论是命名曲线还是指定曲线)组成,公钥的格式不是很明显需要在openssl_dh_compute_key() 工作。
尽管我尝试了,但令我惊讶的是,我没有收到错误,但也没有得到任何输出。
$public = '-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkldhVs+UpzZ/E6hYF536mSYvdnfN
oEa/Idsfu7pBEcqPGHTsp+zDM/rquKwr8eoxn554LYw/3udRgzEpHk4vag==
-----END PUBLIC KEY-----';
$private = openssl_pkey_get_private('-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgF1ZD0LhQm5q71gL9
O+yzfX8g/sdYTBz/50nkw6wrE16hRANCAAQeZkUZ3ey7W5Czz52pOLmgSBHlnI3u
9gLcbr9NVCecEstDR0EK2+fJMfokogfW+RdoEJKN0qLdHilGPGHV/aq1
-----END PRIVATE KEY-----');
$s = openssl_dh_compute_key($public, $private);
echo bin2hex($s);
echo "\n\n";
echo openssl_error_string();
$s 是假的。
【问题讨论】:
-
不是 PHP 级别
-
你能用
echo openssl_error_string();找到错误吗? -
我猜你的公钥不应该是 PEM 格式的字符串。见:link
标签: php openssl php-openssl