热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

今天用openssl_pkey_get_private()函数遇到了一个大坑:如果你的私钥文件(private_key.pem)是-----BEGINPRIVATEK

今天用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);

文章来源: www.oschina.net,作者:xiaogg,版权归原作者所有,如需转载,请联系作者。

原文链接:https://my.oschina.net/xiaogg/blog/3154557



推荐阅读
author-avatar
端庄的张佳迎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有