Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah anda menyimpan kunci peribadi ECDSA dalam Go dengan selamat?
Menyimpan Kunci Peribadi ECDSA dalam Go: Panduan Komprehensif
Apabila bekerja dengan ECDSA (Elliptic Curve Digital Signature Algorithm) dalam Go, ia menjadi diperlukan untuk menyimpan kunci persendirian dengan selamat. Kaedah ecdsa.GenerateKey menyediakan cara untuk mencipta pasangan kunci persendirian/awam, tetapi menyerahkan penyimpanan kunci persendirian kepada pembangun. Panduan ini akan menyelidiki pendekatan yang disyorkan untuk menyimpan kunci persendirian ECDSA dalam Go.
Pengekodan Tersuai lwn. Pengekodan Standard
Persoalannya timbul sama ada untuk melaksanakan pengekodan kunci secara manual atau menggunakan kaedah pengekodan standard. Pendekatan yang disyorkan ialah memanfaatkan perpustakaan Go standard untuk storan kunci. Ini memastikan kesalingoperasian dengan aplikasi lain dan mematuhi amalan terbaik industri.
Pengekodan PEM: Pilihan Serbaguna
Pengekodan PEM (Mel Dipertingkatkan Privasi) berfungsi sebagai diterima pakai secara meluas standard untuk menyimpan kunci. Ia menggabungkan beberapa langkah:
Kekunci Pengekodan dan Penyahkod
Sampel kod berikut menunjukkan cara mengekod dan menyahkod kunci ECDSA menggunakan pengekodan PEM:
import ( "crypto/ecdsa" "crypto/elliptic" "crypto/pem" "crypto/rand" "fmt" "reflect" ) func encode(privateKey *ecdsa.PrivateKey, publicKey *ecdsa.PublicKey) (string, string) { // Marshal the private key to X.509 format x509Encoded, _ := x509.MarshalECPrivateKey(privateKey) // Encode the X.509-formatted key into PEM format pemEncoded := pem.EncodeToMemory(&pem.Block{Type: "PRIVATE KEY", Bytes: x509Encoded}) // Marshal the public key to X.509 format x509EncodedPub, _ := x509.MarshalPKIXPublicKey(publicKey) // Encode the X.509-formatted public key into PEM format 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) { // Decode the PEM-encoded private key from a string block, _ := pem.Decode([]byte(pemEncoded)) // Extract the X.509-formatted private key from the PEM block x509Encoded := block.Bytes // Parse the X.509-formatted private key privateKey, _ := x509.ParseECPrivateKey(x509Encoded) // Decode the PEM-encoded public key from a string blockPub, _ := pem.Decode([]byte(pemEncodedPub)) // Extract the X.509-formatted public key from the PEM block x509EncodedPub := blockPub.Bytes // Parse the X.509-formatted public key genericPublicKey, _ := x509.ParsePKIXPublicKey(x509EncodedPub) // Convert the generic public key to an ecdsa.PublicKey publicKey := genericPublicKey.(*ecdsa.PublicKey) return privateKey, publicKey } // Test the encoding and decoding functionality func test() { // Generate an ECDSA key pair privateKey, _ := ecdsa.GenerateKey(elliptic.P384(), rand.Reader) publicKey := &privateKey.PublicKey // Encode the key pair into PEM encPriv, encPub := encode(privateKey, publicKey) // Decode the PEM-encoded key pair priv2, pub2 := decode(encPriv, encPub) // Compare the original and decoded keys 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 memanfaatkan teknik ini, pembangun boleh menyimpan dan mengurus kunci peribadi ECDSA dalam Go dengan selamat. Pengekodan PEM menyediakan format yang mantap dan diterima secara meluas untuk menyimpan kunci, membolehkan kesalingoperasian dengan pelbagai aplikasi dan memastikan integriti data.
Atas ialah kandungan terperinci Bagaimanakah anda menyimpan kunci peribadi ECDSA dalam Go dengan selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!