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 关注
- 120 浏览
添加回答
举报