1 回答

TA貢獻2039條經驗 獲得超8個贊
來自 node-jsonwebtoken 的 和 和 方法 需要 PEM 編碼的密鑰。因此,節點 JS 端將提供 PEM 編碼的公鑰或需要 PEM 編碼的密鑰(X.509/SPKI 格式或 PKCS#1 格式)。jwt.sign()jwt.verify()
密鑰導出和導入在包中的 Go 中實現,PEM 編碼在包中實現,RSA 在包中實現。crypto/x509encoding/pemcrypto/rsa
使用 Go 中發布的方法生成私鑰和公鑰是:GeneratePrivateKey()
privateKey := GeneratePrivateKey()
publicKey := &privateKey.PublicKey
可以在 Go 中導出 X.509/SPKI 格式的 PEM 編碼公鑰,例如:
func ExportSPKIPublicKeyPEM(pubkey *rsa.PublicKey) (string){
spkiDER, _ := x509.MarshalPKIXPublicKey(pubkey)
spkiPEM := pem.EncodeToMemory(
&pem.Block{
Type: "PUBLIC KEY",
Bytes: spkiDER,
},
)
return string(spkiPEM)
}
或者,可以使用 導出 PKCS#1 格式的 PEM 編碼公鑰。為此,必須指定。MarshalPKCS1PublicKey()TypeRSA PUBLIC KEY
導出的密鑰可以使用 ASN.1 解析器進行檢查,例如,使用以下命令聯機檢查:https://lapo.it/asn1js/
在 Go 中可以導入 X.509/SPKI 格式的 PEM 編碼公鑰,例如:
func ImportSPKIPublicKeyPEM(spkiPEM string) (*rsa.PublicKey) {
body, _ := pem.Decode([]byte(spkiPEM ))
publicKey, _ := x509.ParsePKIXPublicKey(body.Bytes)
if publicKey, ok := publicKey.(*rsa.PublicKey); ok {
return publicKey
} else {
return nil
}
}
可以使用 PKCS#1 格式的 PEM 編碼公鑰進行導入。ParsePKCS1PublicKey()
- 1 回答
- 0 關注
- 103 瀏覽
添加回答
舉報