php5.3 openssl_pkey_get_private 返回都是false 5.6就是正常的

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);