Menyimpan Kunci Peribadi ECDSA dalam Go
Apabila bekerja dengan pasangan kunci ECDSA dalam Go, keperluan sering timbul untuk menyimpan kunci persendirian dengan selamat. Panduan ini akan menyelidiki teknik untuk menyimpan kunci peribadi secara berkesan dalam fail pada komputer pengguna.
Pengekodan dan Penyahkodan Kunci Peribadi
Go tidak menyediakan mekanisme langsung untuk mengawal kunci persendirian menggunakan kaedah eliptik.Marshal. Sebaliknya, proses pengekodan berbilang langkah diperlukan:
Kod Contoh
Kod Go berikut menunjukkan proses di atas:
package main import ( "crypto/ecdsa" "crypto/elliptic" "crypto/rand" "crypto/x509" "encoding/pem" "fmt" "reflect" ) 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 main() { 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.") } }
Dengan menyimpan kunci peribadi yang dikodkan PEM sebagai fail, ia boleh diambil dan dinyahkod kemudian mengikut keperluan. Ingat untuk menggunakan langkah keselamatan yang sesuai untuk melindungi fail daripada akses atau pendedahan yang tidak dibenarkan.
Atas ialah kandungan terperinci Bagaimana untuk Menyimpan Kunci Peribadi ECDSA dengan Selamat dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!