go解析含passphrase的pem秘钥
package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"fmt"
"os"
)
// 解析带有密码保护的PEM文件中的RSA私钥
func parsePassphraseProtectedPEM(pemPath, passphrase string) (*rsa.PrivateKey, error) {
pemBytes, err := os.ReadFile(pemPath)
if err != nil {
return nil, err
}
block, rest := pem.Decode(pemBytes)
if len(rest) > 0 {
return nil, fmt.Errorf("pem file contains additional data")
}
if block == nil || block.Type != "RSA PRIVATE KEY" {
return nil, fmt.Errorf("pem file does not contain RSA private key")
}
x509Encoded := block.Bytes
if len(passphrase) > 0 {
x509Encoded, err = x509.DecryptPEMBlock(block, []byte(passphrase))
if err != nil {
return nil, err
}
}
privateKey, err := x509.ParsePKCS1PrivateKey(x509Encoded)
if err != nil {
return nil, err
}
return privateKey, nil
}
func main() {
// 示例:使用函数解析带有密码保护的PEM文件
privateKey, err := parsePassphraseProtectedPEM("path/to/private.pem", "your-passphrase")
if err != nil {
fmt.Println("Failed to parse private key:", err)
return
}
fmt.Println("Private key parsed successfully:", privateKey)
}
这段代码提供了一个parsePassphraseProtectedPEM
函数,用于解析一个带有密码保护的PEM文件。它首先读取PEM文件,然后尝试解码并检查PEM数据。如果提供了密码,它会尝试使用密码解密PEM数据。最后,它会尝试解析出RSA私钥。如果在任何步骤中发生错误,函数将返回相应的错误信息。
评论已关闭