php openssl_get_privatekey 提示未定义,php中openssl_pkey_get_private()函数遇到false的问题 解决办法…

215次阅读
没有评论

php 中 openssl_pkey_get_private()函数遇到 false 的问题

原文链接 https://blog.csdn.net/weixin_29211309/article/details/116285895

用 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-----\n" .$content."\n-----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, "\n");

$pem = "-----BEGIN RSA PRIVATE KEY-----\n" .$content."-----END RSA PRIVATE KEY-----";

$pkeyid = openssl_pkey_get_private($pem);

openssl_sign($data,$sign,$pkeyid,OPENSSL_ALGO_MD5);

$t=base64_encode($sign);

RSA 公钥私钥生成 pem 文件

原文链接:https://www.jianshu.com/p/10a4cb956c86

对接第三方接口时,对方有时只给了公钥私钥,这就需要自己来生成 pem 文件,
OpenSSL 在线生成 RSA 公私钥,同时把私钥在线生成合成 PEM 文件,公钥直接放到 txt,改后缀为.pem,
对于公钥,新建 txt,将公钥内容保存成.pem 后缀即可
1、网址:
https://www.myssl.cn/tools/merge-pem-cert.html
选择 pem 在线合成,将私钥复制过去,注意格式,到处 pem 文件即可
2、私钥格式
—–BEGIN RSA PRIVATE KEY—–
中间填写私钥
—–END RSA PRIVATE KEY—–
3、公钥格式
—–BEGIN PUBLIC KEY—–
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCFSwKKJQ2hO5uaDAdWayCx5DFzBeqpgvCPxQno8+IcAXI+fR9627XMnARJhMTiUxsHsRZDYEWpIajPt7j91cm1rtRgWDZqlc4IFiis04bpfVTxN/jkzJcXhuB+t0bAjtf/ydDKFGr1zDJC97cZGQTuRLU6npNfNnnjzlfHwt2caQIDAQAB
—–END PUBLIC KEY—–
4、生成公钥私钥的网站
http://tool.chacuo.net/cryptrsaprikey

作者:空口言_1d2e
链接:https://www.jianshu.com/p/10a4cb956c86

正文完
有偿技术支持加微信
post-qrcode
 
评论(没有评论)
验证码