php5.3 openssl_pkey_get_private 返回都是false
php5.6就能正常使用
貌似我的php5.300openssl相关函数都有问题
参考这几篇文章看看:
https://www.php.net/manual/en/function.openssl-pkey-get-private.php
https://blog.csdn.net/ganggang4321/article/details/103889962
```go
package main
import (
"crypto"
"crypto/x509"
"encoding/pem"
"fmt"
"io/ioutil"
"log"
"strings"
)
func main() {
pemBytes, err := ioutil.ReadFile("sample.key.pem")
check(err)
block := firstPrivateKey(pemBytes)
if block == nil {
log.Fatal("No private key in input")
}
derBytes := block.Bytes
if x509.IsEncryptedPEMBlock(block) {
derBytes, err = x509.DecryptPEMBlock(block, []byte("password"))
check(err)
}
var key crypto.PrivateKey
switch block.Type {
case "RSA PRIVATE KEY":
key, err = x509.ParsePKCS1PrivateKey(derBytes) // or PKCS8
check(err)
case "EC PRIVATE KEY":
key, err = x509.ParseECPrivateKey(derBytes)
check(err)
default:
log.Fatal("Unsupported key type")
}
fmt.Println(key)
}
func firstPrivateKey(pemBytes []byte) *pem.Block {
var block *pem.Block
for len(pemBytes) > 0 {
block, pemBytes = pem.Decode(pemBytes)
if strings.HasSuffix(block.Type, " PRIVATE KEY") {
return block
}
}
return nil
}
func check(err error) {
if err != nil {
log.Fatal(err)
}
}
```
版本问题,换个正常的版本就可以了
PHP 版本差异:PHP 5.6 和 PHP 5.3 在 OpenSSL 扩展方面可能存在一些差异。确保你的 PHP 5.3 版本与 PHP 5.6 版本具有相同的 OpenSSL 版本。
缺少扩展:确认在 PHP 5.3 中启用了 OpenSSL 扩展。
版本不形容
openssl_get_privatekey返回值为空 false
我原本的peivate_key的内容是这样子的,一个字符串,没有任何格式:
$privateKey = 'AbbCdwI...8='
在laravel框架中,下边这样拼起来就行了
直接使用是不可以的。
$privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" .$privateKey."\n-----END RSA PRIVATE KEY-----";
用原生php试了下,第一种方法 返回也是false. 后来这样解决,先使用wordwrap,单后再使用第一种方法拼起来,就可以了
$private_content = wordwrap($privateKey, 64, "\n", true);