php 通过扩展 OpenSSL 实现了 ECDSA(签名), 但是没有实现 ECIES(数据加解密).
// 获取私钥
$privateKey = openssl_pkey_new([
'private_key_bits' => 384,
'private_key_type' => 'secp384r1' // 或者 SM2
])
// 获取公钥
$publicKey = openssl_pkey_get_details($privateKey)['key'];
// 生成签名
openssl_sign($hash, $signature, $privateKey);
// 打印签名
var_dump($signature);
// 使用私钥加密数据 (使用 ECC 密钥加密会提示不支持, RSA 则正常)
openssl_private_encrypt('test data', $crypt, $privateKey);
// 封装数据
openssl_seal('test data', $sealed, $env_keys, [$publicKey], 'RC4');
// 如果为 ECC 密钥则为 null, $env_keys 同.
var_dump($sealed)
这个库是在 github 上找的, 与 OpenSSL 扩展比较的话自行实现了 ECDH.
简单测试了下好像速度签名和密钥生成速度比 OpenSSL 扩展慢不少的样子(可能 5-10 倍?).
这东西是 OpenSSL 的分支, 看官方文档好像支持加解密.
克隆源码然后准备编译.
按照官网文档上步骤来.
perl Configure VC-WIN64
. perl Configure VC-WIN64
之后不知道成没成功, 反正没看到报错. nmake
, 报了个错, 啥 makefile 问题, 然后折腾了一段时间, 没看到有这个错的解决方法(太菜了). 折腾了一晚上, 还是没找到解决方法, 现在就想知道有无大佬有 ECIES 实现的库.
1
neighbads 2021-04-03 18:43:32 +08:00 via Android
gmssl 的就行,但是跟 java 的 bc 对接有点问题 需要改一改。
|