Maison  >  Article  >  développement back-end  >  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
WBOYavant
2024-02-13 19:09:08443parcourir

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

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
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer