亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Go 中存儲 ECDSA 私鑰

如何在 Go 中存儲 ECDSA 私鑰

Go
慕斯709654 2021-07-16 14:00:47
我正在使用該ecdsa.GenerateKey方法在 Go 中生成私鑰/公鑰對。我想將私鑰存儲在用戶計算機上的文件中,并在程序啟動時加載它。有一種方法elliptic.Marshal可以編組公鑰,但沒有對私鑰進行編組。我應該簡單地推出自己的,還是有推薦的方法來存儲私鑰?
查看完整描述

2 回答

?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

這是一個代碼示例,演示了 Go 中密鑰的編碼和解碼。知道您需要連接幾個步驟會有所幫助。加密算法是第一步,在這種情況下是 ECDSA 密鑰。然后你需要標準編碼,x509 是最常用的標準。最后你需要一種文件格式,PEM 又是一種常用的格式。這是目前最常用的組合,但可以隨意替換任何其他算法或編碼。


func encode(privateKey *ecdsa.PrivateKey, publicKey *ecdsa.PublicKey) (string, string) {

    x509Encoded, _ := x509.MarshalECPrivateKey(privateKey)

    pemEncoded := pem.EncodeToMemory(&pem.Block{Type: "PRIVATE KEY", Bytes: x509Encoded})


    x509EncodedPub, _ := x509.MarshalPKIXPublicKey(publicKey)

    pemEncodedPub := pem.EncodeToMemory(&pem.Block{Type: "PUBLIC KEY", Bytes: x509EncodedPub})


    return string(pemEncoded), string(pemEncodedPub)

}


func decode(pemEncoded string, pemEncodedPub string) (*ecdsa.PrivateKey, *ecdsa.PublicKey) {

    block, _ := pem.Decode([]byte(pemEncoded))

    x509Encoded := block.Bytes

    privateKey, _ := x509.ParseECPrivateKey(x509Encoded)


    blockPub, _ := pem.Decode([]byte(pemEncodedPub))

    x509EncodedPub := blockPub.Bytes

    genericPublicKey, _ := x509.ParsePKIXPublicKey(x509EncodedPub)

    publicKey := genericPublicKey.(*ecdsa.PublicKey)


    return privateKey, publicKey

}


func test() {

    privateKey, _ := ecdsa.GenerateKey(elliptic.P384(), rand.Reader)

    publicKey := &privateKey.PublicKey


    encPriv, encPub := encode(privateKey, publicKey)


    fmt.Println(encPriv)

    fmt.Println(encPub)


    priv2, pub2 := decode(encPriv, encPub)


    if !reflect.DeepEqual(privateKey, priv2) {

        fmt.Println("Private keys do not match.")

    }

    if !reflect.DeepEqual(publicKey, pub2) {

        fmt.Println("Public keys do not match.")

    }

}



查看完整回答
反對 回復 2021-07-19
  • 2 回答
  • 0 關注
  • 300 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號