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

djmepvbi  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(111)

我在Node.js中使用crypto库生成了一个公钥和私钥,代码如下。

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格式”,但它没有任何意义。
我试图生成新的密钥和完全相同的问题仍然存在。

jxct1oxe

jxct1oxe1#

我finnaly解决了它生成密钥使用OpenSSL库在windows cmd.然后我使用OpenSSL生成的密钥加密和解密数据。我不得不在围棋中对解密后的数据进行清理,但它终于起作用了。

相关问题