Golang は ECDH 秘密キーを抽出します

WBOY
リリース: 2024-02-12 21:40:10
転載
777 人が閲覧しました

Golang 提取 ECDH 私钥

php エディター Apple は、Golang で ECDH 秘密キーを抽出するための簡潔なガイドを提供します。 ECDH は、2 つの通信当事者間で安全なキー交換を確立するために使用される非対称暗号化アルゴリズムです。 Golang では、ECDH 秘密キーの抽出は安全な通信を実現するための重要な手順の 1 つです。この記事では、Golang プログラミング言語を使用して ECDH 秘密キーを抽出する方法の詳細な手順と注意事項を紹介し、この重要なスキルをすぐに習得できるようにします。初心者でも経験豊富な開発者でも、この記事は役立つガイダンスと実践的なコード例を提供します。始めましょう!

質問内容

ECDH秘密鍵は公開鍵のスーパーセットであることは知っています。タスクは秘密キー ecdh を抽出することです。

PublicKey の生成方法は次のとおりです。

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
}
ログイン後にコピー

回避策

公開キーの場合と同様に、ecdh 秘密キーを pem 形式で抽出したいと考えます。公開鍵から秘密鍵を抽出することは不可能です (計算上実行不可能です)。 UnmarshalECDSAPublicKey 関数を実装しました (名前を MarshalECDHPrivateKey に変更することをお勧めします)

リーリー

他の人が MarshalECDHPublicKey 関数に関するコメントで指摘しているように、再度エンコードするために base64.StdEncoding.EncodeToString(ecdhSKPEMBlock) を使用する必要はありません。 pem.EncodeToMemory も同じことを行い、文字列に変換するだけです。

以上がGolang は ECDH 秘密キーを抽出しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート