Maison >développement back-end >Golang >Golang extrait la clé privée ECDH
éditeur php Apple vous propose un guide simple pour extraire les clés privées ECDH dans Golang. ECDH est un algorithme de chiffrement asymétrique utilisé pour établir un échange de clé sécurisé entre deux parties communicantes. Dans Golang, l’extraction de la clé privée ECDH est l’une des étapes importantes pour parvenir à une communication sécurisée. Cet article présentera les étapes détaillées et les précautions sur la façon d'utiliser le langage de programmation Golang pour extraire la clé privée ECDH, vous aidant ainsi à maîtriser rapidement cette compétence clé. Que vous soyez un développeur débutant ou expérimenté, cet article vous fournira des conseils utiles et des exemples de code pratiques. Commençons!
Je sais que la clé privée ECDH est un sur-ensemble de la clé publique. La tâche consiste à extraire la clé privée ecdh.
La méthode pour générer PublicKey est la suivante :
import ( "crypto/ecdh" "crypto/rand" "crypto/ecdsa" "crypto/x509" "encoding/base64" "encoding/pem" "fmt" ) func main() { alicePrivateKey, err := ecdh.P256().GenerateKey(rand.Reader) alicePublicKey, err := MarshalECDHPublicKey(alicePrivateKey.PublicKey()) if err != nil { fmt.Errorf("failed to marshal public key into PKIX format") } fmt.Printf("alicePubK => %s\n", alicePublicKey) clientECDSAPubKey, err := UnmarshalECDSAPublicKey(alicePublicKey) if err != nil { panic(err) } println(clientECDSAPubKey) println("no error") } func MarshalECDHPublicKey(pk *ecdh.PublicKey) (string, error) { ecdhSKBytes, err := x509.MarshalPKIXPublicKey(pk) if err != nil { return "", fmt.Errorf("failed to marshal public key into PKIX format") } ecdhSKPEMBlock := pem.EncodeToMemory( &pem.Block{ Type: "PUBLIC KEY", Bytes: ecdhSKBytes, }, ) return base64.StdEncoding.EncodeToString(ecdhSKPEMBlock), nil }
Je suppose que vous souhaitez utiliser pem
格式提取 ecdh
私钥,就像使用公钥一样。从公钥中提取私钥是不可能的(计算上不可行)。我已经为您实现了 UnmarshalECDSAPublicKey
函数(最好重命名为 MarshalECDHPrivateKey
)
// MarshalPKCS8PrivateKey converts a private key to PKCS #8, ASN.1 DER form. // // The following key types are currently supported: *rsa.PrivateKey, // *ecdsa.PrivateKey, ed25519.PrivateKey (not a pointer), and *ecdh.PrivateKey. // Unsupported key types result in an error. // // This kind of key is commonly encoded in PEM blocks of type "PRIVATE KEY". func UnmarshalECDSAPublicKey(alicePrivateKey *ecdh.PrivateKey) (string, error) { ecdhSKBytes, err := x509.MarshalPKCS8PrivateKey(alicePrivateKey) if err != nil { return "", fmt.Errorf("failed to marshal private key into PKIX format") } ecdhSKPEMBlock := pem.EncodeToMemory( &pem.Block{ Type: "PRIVATE KEY", Bytes: ecdhSKBytes, }, ) return string(ecdhSKPEMBlock), nil }
Comme d'autres l'ont dit à propos de MarshalECDHPublicKey
函数的评论中指出的那样,您不需要使用 base64.StdEncoding.EncodeToString(ecdhSKPEMBlock)
再次编码,因为 pem.EncodeToMemory
fera la même chose, il vous suffit de le convertir en chaîne.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!