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