我在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格式”,但它没有任何意义。
我试图生成新的密钥和完全相同的问题仍然存在。
1条答案
按热度按时间jxct1oxe1#
我finnaly解决了它生成密钥使用OpenSSL库在windows cmd.然后我使用OpenSSL生成的密钥加密和解密数据。我不得不在围棋中对解密后的数据进行清理,但它终于起作用了。