我正在尝试使用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()