php小編西瓜在最近的開發過程中遇到了一個問題,他發現在使用Node.js產生的私鑰在Go中無法被識別為PEM格式。這個問題困擾了他很長一段時間,他嘗試了各種方法來解決這個問題,但都沒有成功。在這篇文章中,我們將探討這個問題的原因以及可能的解決方法,幫助讀者解決類似的困擾。
我使用加密函式庫和以下程式碼在 node.js 中產生了公鑰和私密金鑰。
function generatekeyfiles() { const keypair = crypto.generatekeypairsync("rsa", { moduluslength: 4096, publickeyencoding: { type: "spki", format: "pem", }, privatekeyencoding: { type: "pkcs8", format: "pem", cipher: "aes-256-cbc", passphrase: "", }, }); // writing the keys in the following files fs.writefilesync("public_key", keypair.publickey); fs.writefilesync("private_key", keypair.privatekey); }
我知道金鑰正在起作用,因為我已經使用它們加密和解密了資料。但我嘗試在 go 中使用它們,它無法偵測 pem 格式的私鑰。然而,它確實識別公鑰。這是我的 go 程式碼片段:
// Load public key from the "public_key" file generated by Node.js publicKeyData, err := ioutil.ReadFile("public_key") if err != nil { fmt.Println("Error reading the public key file:", err) return } // Load public key in PEM format block, _ := pem.Decode(publicKeyData) if block == nil || block.Type != "PUBLIC KEY" { fmt.Println("The public key file is not in PEM format") return } publicKey, err := x509.ParsePKIXPublicKey(block.Bytes) if err != nil { fmt.Println("Error loading the public key:", err) return } // Successfully loaded the public key in Go fmt.Println("Public key loaded successfully:", publicKey) // Load private key from the "private_key" file generated by Node.js privateKeyData, err := ioutil.ReadFile("private_key") if err != nil { fmt.Println("Error reading the private key file:", err) return } // Load private key in PEM format block, _ = pem.Decode(privateKeyData) if block == nil || block.Type != "PRIVATE KEY" { fmt.Println("The private key file is not in PEM format") return }
拜託,我需要幫忙。我不明白為什麼當我的其他 node.js 程式中使用公鑰和私鑰進行加密時,它會讀取公鑰而不讀取私鑰。它說“私鑰檔案不是 pem 格式”,但這沒有任何意義。
我嘗試產生新金鑰,但完全相同的問題仍然存在。
我最終解決了這個問題,在 Windows cmd 上使用 OpenSSL 函式庫產生金鑰。然後我使用 OpenSSL 產生的金鑰對資料進行加密和解密。我必須在 go 中清理解密的數據,但它最終起作用了。
以上是我在 Node.js 中產生的私鑰在 Go 中不被識別為 PEM 格式的詳細內容。更多資訊請關注PHP中文網其他相關文章!