首页 > 解决方案 > openssl_public_encrypt():此 PHP 版本不支持密钥类型

问题描述

我看到很多问题看起来像我的,有点确定它不是同一个问题。

环境:PHP版本7.1.33-15+ubuntu16.04.1+deb.sury.org+1,openssl-1.1.1g

我想用sm2曲线加密数据,公钥\私钥都是openssl生成的,命令:</p>

./openssl ecparam -genkey -name SM2 -out priv.key
./openssl ec -in priv.key -pubout -out pub.key

然后我在php上试试:

$pubKey = openssl_pkey_get_public('-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE6ULQ5Zxk6rePcMERuONCk0L9R7Bz
GdTTsqAxtEYSQAspJZu5wurPz8sq79WW7ELnjZaXi5o/x8NJ1NabCOoEgg==
-----END PUBLIC KEY-----');

openssl_public_encrypt($data, $encrypted_data, $pubKey, $padding=OPENSSL_NO_PADDING);

当我得到 $pubKey 时很好,加密时出错:

openssl_public_encrypt():此 PHP 版本不支持密钥类型!

并且没有其他错误,为什么 php 无法读取 sm2 pubKey?(可用曲线肯定包括 sm2)。感谢您在遇到像我这样的错误时给我任何答案或链接,如果您需要了解更多信息,请随时询问。

标签: phpopenssl

解决方案


推荐阅读