php中openssl_pkey_get_private()函数遇到false的问题 解决办法
Posted 1994july
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php中openssl_pkey_get_private()函数遇到false的问题 解决办法相关的知识,希望对你有一定的参考价值。
今天用openssl_pkey_get_private()函数遇到了一个大坑:
如果你的私钥文件(private_key.pem)是
-----BEGIN PRIVATE KEY-----字符串字符串-----END PRIVATE KEY-----
要是私钥文件的字符串全部写在一行 此函数就会返回false,我的php版本是5.6版本的
正常使用两种办法
1.$privateKey = openssl_pkey_get_private($privateKey);
2.$privateKey = openssl_pkey_get_private(file_get_contents($privateKey));
尤其第二种很容易遇到问题而导致返回false. 原因不明.
解决方案:只需要把文件中的字符串换行就好,如下所示
-----BEGIN PRIVATE KEY-----
字符串字符串
字符串字符串
-----END PRIVATE KEY-----
以下两段代码.不同环境下都能用.有时候返回false换另一种试试
代码一
$pem = "-----BEGIN RSA PRIVATE KEY-----
" .$content."
-----END RSA PRIVATE KEY-----";
$pkeyid = openssl_pkey_get_private($pem);
openssl_sign($data,$sign,$pkeyid,OPENSSL_ALGO_MD5);
$t=base64_encode($sign);
代码二(特别注意换行)
$content=chunk_split($content, 64, "
");
$pem = "-----BEGIN RSA PRIVATE KEY-----
" .$content."-----END RSA PRIVATE KEY-----";
$pkeyid = openssl_pkey_get_private($pem);
openssl_sign($data,$sign,$pkeyid,OPENSSL_ALGO_MD5);
$t=base64_encode($sign);
以上是关于php中openssl_pkey_get_private()函数遇到false的问题 解决办法的主要内容,如果未能解决你的问题,请参考以下文章
openssl_get_privatekey openssl签名问题