我正在处理一些旧代码,遇到了opensl密钥加密,该密钥引发E_WARNING并显示错误消息“ openssl_free_key()期望参数1为资源,给定字符串”。
经过仔细检查,我发现私钥确实是字符串而不是资源。
由于密钥是字符串,并且密钥不是由“ openssl_get_privatekey”生成的,因此在请求结束时是否需要“ openssl_free_key”?
搜索并查看PHP文档,没有提供有关此问题的明确信息。
$value = 'something';
if (openssl_pkcs12_read($file, $cart, $pass) === true) {
$private_key = $cart['pkey'];
} else {
throw new Exception('Failed to open certificate.');
}
if (isset($private_key)) {
openssl_sign($value, $signature, $private_key, OPENSSL_ALGO_SHA1);
openssl_free_key($private_key);
}