Maison > développement back-end > Golang > La clé privée que j'ai générée dans Node.js n'est pas reconnue au format PEM dans Go

La clé privée que j'ai générée dans Node.js n'est pas reconnue au format PEM dans Go

WBOY
Libérer: 2024-02-13 19:09:08
avant
492 Les gens l'ont consulté

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

L'éditeur php Xigua a rencontré un problème lors du récent processus de développement. Il a constaté que la clé privée générée à l'aide de Node.js ne pouvait pas être reconnue au format PEM dans Go. Ce problème l’a longtemps préoccupé et il a essayé diverses méthodes pour le résoudre, mais sans succès. Dans cet article, nous explorerons les causes de ce problème et les solutions possibles pour aider les lecteurs à résoudre des problèmes similaires.

Contenu de la question

J'ai généré des clés publiques et privées dans node.js en utilisant une bibliothèque cryptographique et le code suivant.

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);
}
Copier après la connexion

Je sais que les clés fonctionnent parce que je les ai utilisées pour crypter et déchiffrer des données. Mais j'essaie de les utiliser en go et il ne parvient pas à détecter la clé privée au format pem. Cependant, il reconnaît la clé publique. Voici mon extrait de code 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
}
Copier après la connexion

S'il vous plaît, j'ai besoin d'aide. Je ne comprends pas pourquoi lorsque j'utilise des clés publiques et privées pour le chiffrement dans mon autre programme node.js, il lit la clé publique mais pas la clé privée. Il dit "le fichier de clé privée n'est pas au format pem" mais cela n'a aucun sens.

J'ai essayé de générer une nouvelle clé mais exactement le même problème persiste.

Solution de contournement

J'ai finalement résolu ce problème en utilisant la bibliothèque OpenSSL sur Windows cmd pour générer des clés. J'ai ensuite chiffré et déchiffré les données à l'aide des clés générées par OpenSSL. J'ai dû nettoyer les données décryptées au fur et à mesure, mais cela a finalement fonctionné.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal