首頁 > 後端開發 > Golang > 我在 Node.js 中產生的私鑰在 Go 中不被識別為 PEM 格式

我在 Node.js 中產生的私鑰在 Go 中不被識別為 PEM 格式

WBOY
發布: 2024-02-13 19:09:08
轉載
507 人瀏覽過

我在 Node.js 中生成的私钥在 Go 中不被识别为 PEM 格式

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中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板