Heim  >  Artikel  >  Backend-Entwicklung  >  Der private Schlüssel, den ich in Node.js generiert habe, wird in Go nicht als PEM-Format erkannt

Der private Schlüssel, den ich in Node.js generiert habe, wird in Go nicht als PEM-Format erkannt

WBOY
WBOYnach vorne
2024-02-13 19:09:08443Durchsuche

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

php-Editor Xigua ist während des letzten Entwicklungsprozesses auf ein Problem gestoßen. Er hat festgestellt, dass der mit Node.js generierte private Schlüssel in Go nicht als PEM-Format erkannt werden konnte. Dieses Problem beschäftigte ihn lange Zeit und er versuchte es mit verschiedenen Methoden zu lösen, jedoch ohne Erfolg. In diesem Artikel werden wir die Ursachen dieses Problems und mögliche Lösungen untersuchen, um den Lesern bei der Lösung ähnlicher Probleme zu helfen.

Frageninhalt

Ich habe die öffentlichen und privaten Schlüssel in node.js mithilfe der Verschlüsselungsbibliothek und dem folgenden Code generiert.

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

Ich weiß, dass die Schlüssel funktionieren, weil ich sie zum Ver- und Entschlüsseln von Daten verwendet habe. Aber ich versuche, sie in go zu verwenden, und es kann den privaten Schlüssel im PEM-Format nicht erkennen. Es erkennt jedoch den öffentlichen Schlüssel. Hier ist mein Go-Code-Snippet:

// 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
}

Bitte, ich brauche Hilfe. Ich verstehe nicht, warum, wenn ich öffentliche und private Schlüssel zur Verschlüsselung in meinem anderen node.js-Programm verwende, der öffentliche Schlüssel, aber nicht der private Schlüssel gelesen wird. Es heißt: „Die Datei mit dem privaten Schlüssel liegt nicht im PEM-Format vor“, aber das ergibt keinen Sinn.

Ich habe versucht, einen neuen Schlüssel zu generieren, aber genau das gleiche Problem besteht weiterhin.

Workaround

Ich habe dieses Problem endlich gelöst, indem ich die OpenSSL-Bibliothek unter Windows cmd verwendet habe, um Schlüssel zu generieren. Anschließend habe ich die Daten mit den von OpenSSL generierten Schlüsseln verschlüsselt und entschlüsselt. Ich musste die entschlüsselten Daten in go bereinigen, aber es hat schließlich funktioniert.

Das obige ist der detaillierte Inhalt vonDer private Schlüssel, den ich in Node.js generiert habe, wird in Go nicht als PEM-Format erkannt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen