php - OpenSSL 支持 ECDH 吗?
问题描述
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
是假的。
解决方案
OpenSSL 确实支持ECDH。我猜 PHP 并没有像 DH 那样公开支持 ECDH 所需的 ECDH 方法。
我的猜测是建议 ECH 使用 EVP 功能,这将在某种程度上抽象 DH 指定,而 ECDH_compute_key 的使用并没有真正记录。
PHP 似乎没有公开足够的 EVP 功能来支持 ECDH。
推荐阅读
- python - 有没有办法在没有第三方的情况下创建电子邮件服务器?
- javascript - “端口”包到一个新名称 npm
- java - 从用 Android Studio 编写的 Login 类创建 Java 单元测试
- python - 如何在不添加括号和双空格的情况下从数组列表中创建数据框?
- javascript -
我无法将事务和事件处理结合起来工作 - javascript - 谷歌图表时间序列中的多个折线图
- css - 有没有办法从 CSS 的中心更改我的文本的不透明度?
- sql - Oracle SQL:查询每年的 YTD
- ruby-on-rails - 如何解决 rails 的错误 Gem::MissingSpecVersionError 问题?
- angular - 带有时区的角度日期管道无法正确转换