这是一个代码示例,演示了Go中密钥的编码和解码。知道您需要连接几个步骤会有所帮助。加密算法是第一步,在这种情况下为ECDSA密钥。然后,您需要标准编码,x509是最常用的标准。最后,您需要一种文件格式,PEM也是常用的一种。这是当前最常用的组合,但是可以随意替换任何其他算法或编码。
func enpre(privateKey *ecdsa.PrivateKey, publicKey *ecdsa.PublicKey) (string, string) { x509Enpred, _ := x509.MarshalECPrivateKey(privateKey) pemEnpred := pem.EnpreToMemory(&pem.Block{Type: "PRIVATE KEY", Bytes: x509Enpred}) x509EnpredPub, _ := x509.MarshalPKIXPublicKey(publicKey) pemEnpredPub := pem.EnpreToMemory(&pem.Block{Type: "PUBLIC KEY", Bytes: x509EnpredPub}) return string(pemEnpred), string(pemEnpredPub)}func depre(pemEnpred string, pemEnpredPub string) (*ecdsa.PrivateKey, *ecdsa.PublicKey) { block, _ := pem.Depre([]byte(pemEnpred)) x509Enpred := block.Bytes privateKey, _ := x509.ParseECPrivateKey(x509Enpred) blockPub, _ := pem.Depre([]byte(pemEnpredPub)) x509EnpredPub := blockPub.Bytes genericPublicKey, _ := x509.ParsePKIXPublicKey(x509EnpredPub) publicKey := genericPublicKey.(*ecdsa.PublicKey) return privateKey, publicKey}func test() { privateKey, _ := ecdsa.GenerateKey(elliptic.P384(), rand.Reader) publicKey := &privateKey.PublicKey encPriv, encPub := enpre(privateKey, publicKey) fmt.Println(encPriv) fmt.Println(encPub) priv2, pub2 := depre(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.") }}


