第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 RSA 驗(yàn)證和簽署從 NodeJS 到戈朗的 JSON 網(wǎng)絡(luò)令牌,反之亦然?

使用 RSA 驗(yàn)證和簽署從 NodeJS 到戈朗的 JSON 網(wǎng)絡(luò)令牌,反之亦然?

Go
天涯盡頭無女友 2022-09-12 16:05:12
我在 Golang 中生成了一個(gè)私鑰,該私鑰應(yīng)該用于對(duì)頒發(fā)給 NodeJS 中編碼的其他服務(wù)的 JSON Web 令牌進(jìn)行簽名。在令牌進(jìn)行任何交換之前,NodeJS 服務(wù)應(yīng)存儲(chǔ) Golang 客戶端的公鑰。我的問題是,我不知道如何導(dǎo)出rsa。公鑰轉(zhuǎn)換為與NodeJS npmjs.com/package/jsonwebtoken 一起使用的格式,并在另一個(gè)方向上執(zhí)行相同的操作;這意味著為 Golang 客戶端提供 NodeJS 服務(wù)的公鑰來驗(yàn)證傳入的令牌。編輯:有問題的代碼 https://github.com/zarkones/XENA 在文件 /xena-apep/main.go 第 16 行和第 36 行下查找。編輯2:以下是有問題的代碼:var privateIdentificationKey = generatePrivateKey() // Generating the private key.identify(id.String(), privateIdentificationKey.publicKey) // Won't work because of the type miss-match./* Generates a private key. */func generatePrivateKey() *rsa.PrivateKey {    secret, err := rsa.GenerateKey(rand.Reader, 4096)    if err != nil {        fmt.Println(err)    }    return secret}/* Makes Xena-Atila aware of its existence. */func identify(id string, identificationKey string) {    insertionPayload := []byte(`{"id":"` + id + `","identificationKey":"` + identificationKey + `","status":"ALIVE"}`)    request, err := http.NewRequest("POST", centralizedHost+"/v1/clients", bytes.NewBuffer(insertionPayload))    request.Header.Set("Content-Type", "application/json")    if err != nil {        fmt.Println("Unable to connect to the centralized host.")    }    client := &http.Client{}    response, err := client.Do(request)    defer response.Body.Close()}
查看完整描述

1 回答

?
largeQ

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()


查看完整回答
反對(duì) 回復(fù) 2022-09-12
  • 1 回答
  • 0 關(guān)注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)