Golang extrahiert den privaten ECDH-Schlüssel

WBOY
Freigeben: 2024-02-12 21:40:10
nach vorne
694 Leute haben es durchsucht

Golang 提取 ECDH 私钥

php-Editor Apple bietet Ihnen eine einfache Anleitung zum Extrahieren privater ECDH-Schlüssel in Golang. ECDH ist ein asymmetrischer Verschlüsselungsalgorithmus, der zum Aufbau eines sicheren Schlüsselaustauschs zwischen zwei kommunizierenden Parteien verwendet wird. In Golang ist das Extrahieren des privaten ECDH-Schlüssels einer der wichtigen Schritte, um eine sichere Kommunikation zu erreichen. In diesem Artikel werden die detaillierten Schritte und Vorsichtsmaßnahmen für die Verwendung der Golang-Programmiersprache zum Extrahieren des privaten ECDH-Schlüssels vorgestellt und Ihnen dabei geholfen, diese Schlüsselkompetenz schnell zu erlernen. Unabhängig davon, ob Sie Anfänger oder erfahrener Entwickler sind, bietet Ihnen dieser Artikel hilfreiche Anleitungen und praktischen Beispielcode. Lass uns anfangen!

Frageninhalt

Ich weiß, dass der private ECDH-Schlüssel eine Obermenge des öffentlichen Schlüssels ist. Die Aufgabe besteht darin, den privaten Schlüssel ecdh zu extrahieren.

Die Methode zum Generieren von PublicKey ist wie folgt:

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
}
Nach dem Login kopieren

Lösung

Ich gehe davon aus, dass Sie pem 格式提取 ecdh 私钥,就像使用公钥一样。从公钥中提取私钥是不可能的(计算上不可行)。我已经为您实现了 UnmarshalECDSAPublicKey 函数(最好重命名为 MarshalECDHPrivateKey)

verwenden möchten
// 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
}
Nach dem Login kopieren

Wie andere bereits gesagt haben, wird MarshalECDHPublicKey 函数的评论中指出的那样,您不需要使用 base64.StdEncoding.EncodeToString(ecdhSKPEMBlock) 再次编码,因为 pem.EncodeToMemory das Gleiche bewirken, man wandelt es einfach in einen String um.

Das obige ist der detaillierte Inhalt vonGolang extrahiert den privaten ECDH-Schlüssel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!