带有openSSL的PHP​​ – 提供的密钥参数不能强制转换为私钥

我正在尝试使用openssl_sign()函数签名文件.我有以下私钥:

—–开始EC私钥—–
MHQCAQEEIDzQVg9bJ1kZFsZDoLeqadA4OTgKc40ukSmQ3MVzcV0soAcGBSuBBAAK
oUQDQgAEvzUNKCE3UVimCLUePomOUH / kfy0ujHdN5Kmn7ez3TtokJDy5ksVnOgf6
WzpmzY46zvKAnQ44Cgx5Kdqx5dVDiw ==
—–结束EC私钥—–

我正在使用以下函数:openssl_sign(“test”,$signature,$private_key,OPENSSL_ALGO_SHA256);.

我有一个服务器能够使用给定的密钥进行签名而另一个服务器不能.有一个PHP 5.6和一个没有PHP 7.1.为什么一台服务器能够使用密钥而一台服务器不能?

解决方法:

也许您需要使用openssl_get_privatekey来创建私钥资源,而不是简单地使用字符串

$str_priv_key='-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIDzQVg9bJ1kZFsZDoLeqadA4OTgKc40ukSmQ3MVzcV0soAcGBSuBBAAK
oUQDQgAEvzUNKCE3UVimCLUePomOUH/kfy0ujHdN5Kmn7ez3TtokJDy5ksVnOgf6
WzpmzY46zvKAnQ44Cgx5Kdqx5dVDiw==
-----END EC PRIVATE KEY-----';

$pkey=openssl_get_privatekey( $str_priv_key );
openssl_sign( "test", $signature, $pkey );
openssl_free_key( $pkey );

根据PHP manual,私钥参数必须是资源

> priv_key_id
> resource - a key, returned by openssl_get_privatekey()
上一篇:使用python OpenSSL从私钥获取公钥


下一篇:python – Pyopenssl验证文件签名