簡體   English   中英

GO-如何將公鑰從字符串轉換為PEM格式

[英]GO - How to convert public key from string to PEM format

我正在嘗試使用jwt庫進行jwt驗證。 我通過調用其REST端點從另一個應用程序獲取公鑰,該REST端點以字符串格式返回公鑰。

因此,現在當嘗試以相同的字符串格式發送該公共密鑰時,我會收到“無效的密鑰格式”。 如何將字符串格式的密鑰轉換為有效的PEM格式的任何幫助都將非常有用。

func (test *TESTStrategy) doJWTValidation(token string, key string, logger *util.Logger) (TESTResponse, error) {
    parsedToken, jwtErr := jwt.Parse(token, func(token *jwt.Token) (interface{}, error) {
        return decodedJWT.ParsedPubKey, nil
    })

下面是將鍵作為字符串傳遞給jwt.Pasrse()調用時出現的錯誤。

在此處輸入圖片說明

公鑰:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsFWkb / eSl6I3DRVhaonW3DFy8EnL0yaPiDzCcOLuYfBjN9zZIR1wXmnMJFle1K89qHGg42wgweVTIwA1XFTfoUKSziwsjF6FscZX5H56ZYyS / wWiO3rWWynlfbSZt + ga71 + NDSU + A0Dy7Nn7ZgP8kRsu4UM5vE7QQTRERNiUKpzScN1cgZUFUqSddQmkwTEN8hH1mFX1Mum54NGqWIlmQxQDrOyogmMXIaaakhabcmuIPMULVVDVwUJC9sSDsc / j05qcZn3kkiEBRyiYB6ZLY2W7WfiV + DB7 / icPONsYSD0FxHWEGNnbqtiGoNf9WZWtaP + o8WMR9sB3GKGVnbLvbQIDAQAB

那是一個PEM編碼的密鑰,只是缺少了BEGIN&END標頭。 該密鑰是簡單的Base64編碼,您可以按以下方式解碼和解組為RSA密鑰:

base64Data := []byte(`MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsFWkb/eSl6I3DRVhaonW3DFy8EnL0yaPiDzCcOLuYfBjN9zZIR1wXmnMJFle1K89qHGg42wgweVTIwA1XFTfoUKSziwsjF6FscZX5H56ZYyS/wWiO3rWWynlfbSZt+ga71+ndsu+A0Dy7Nn7ZgP8kRsu4UM5vE7QQTRERNiUKpzScN1cgZUFUqSddQmkwTEN8hH1mFX1Mum54NGqWIlmQxQDrOyogmMXIaaakhabcmuIPMULVVDVwUJC9sSDsc/j05qcZn3kkiEBRyiYB6ZLY2W7WfiV+dB7/icPONsYSD0FxHWEGNnbqtiGoNf9WZWtaP+o8WMR9sB3GKGVnbLvbQIDAQAB`)
d := make([]byte, base64.StdEncoding.DecodedLen(len(base64Data)))
n, err := base64.StdEncoding.Decode(d, base64Data)
if err != nil {
    // Handle error
}
d = d[:n]
key,err:=x509.ParsePKIXPublicKey(d)
if err != nil {
    // Handle error
}
fmt.Println(key)

如果您需要PEM編碼形式的密鑰,只需添加適當的頁眉和頁腳即可,例如-----BEGIN PUBLIC KEY----------END PUBLIC KEY----- 請注意,BEGIN標頭必須以其自己的行開頭並以新行( "\\n" )結尾。 END標頭也必須以新行開頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM