1 回答

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
來自 node-jsonwebtoken 的 和 和 方法 需要 PEM 編碼的密鑰。因此,節(jié)點(diǎn) JS 端將提供 PEM 編碼的公鑰或需要 PEM 編碼的密鑰(X.509/SPKI 格式或 PKCS#1 格式)。jwt.sign()jwt.verify()
密鑰導(dǎo)出和導(dǎo)入在包中的 Go 中實(shí)現(xiàn),PEM 編碼在包中實(shí)現(xiàn),RSA 在包中實(shí)現(xiàn)。crypto/x509encoding/pemcrypto/rsa
使用 Go 中發(fā)布的方法生成私鑰和公鑰是:GeneratePrivateKey()
privateKey := GeneratePrivateKey()
publicKey := &privateKey.PublicKey
可以在 Go 中導(dǎo)出 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)
}
或者,可以使用 導(dǎo)出 PKCS#1 格式的 PEM 編碼公鑰。為此,必須指定。MarshalPKCS1PublicKey()TypeRSA PUBLIC KEY
導(dǎo)出的密鑰可以使用 ASN.1 解析器進(jìn)行檢查,例如,使用以下命令聯(lián)機(jī)檢查:https://lapo.it/asn1js/
在 Go 中可以導(dǎo)入 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 編碼公鑰進(jìn)行導(dǎo)入。ParsePKCS1PublicKey()
- 1 回答
- 0 關(guān)注
- 111 瀏覽
添加回答
舉報(bào)