私の Go ed25519 公開キーが予想される BEP データと異なるのはなぜですか?

Patricia Arquette
リリース: 2024-10-31 07:23:29
オリジナル
964 人が閲覧しました

Why Does My Go ed25519 Public Key Differ From the Expected BEP Data?

ed25519 キーに一致する BEP の公開鍵の生成

問題:
Go crypto/ed25519 パッケージの使用、生成された公開キーは、BEP データを使用したテスト ケースで提供される予期されたものと異なります。

原因:
ed25519 には異なる秘密キー形式が存在します。 BEP データは 64 バイトのハッシュされた秘密キーを使用しますが、Go パッケージは 32 バイトのハッシュされた秘密キー (32 バイトのシードが接頭辞として付けられます) を使用します。

解決策:
BEP 秘密キーを Go 形式に変換することはできませんが、BEP で使用されるハッシュされた秘密キーを処理するために Go ライブラリの修正バージョンを作成できます。

コードの変更:

変更されたコードには次の関数が含まれています。

  1. getPublicKey: 64 バイトのハッシュされた秘密鍵から公開鍵を生成します。
  2. sign:ハッシュ化された秘密キー、公開キー、メッセージを使用した署名。
<code class="go">func getPublicKey(privateKey []byte) []byte {
    // ... (extraction of 32-byte hash from 64-byte hashed private key and publicKey generation) ...
}

func sign(privateKey, publicKey, message []byte) []byte {
    // ... (extraction of 32-byte hash from 64-byte hashed private key and signature computation) ...
}</code>
ログイン後にコピー

使用法:

この変更されたコードを使用すると、テスト ケースを実行できます。 、生成された公開キーと署名が予想される BEP データと一致することを示しています:

<code class="go">// Using the modified code...

fmt.Printf("Calculated key: %x\n", publicKey)
fmt.Printf("Expected key:   %s\n", expectedPublicKey)
keyMatches := expectedPublicKey == hex.EncodeToString(publicKey)
fmt.Printf("Public key matches expected: %v\n", keyMatches)

// Similarly, check for signature match</code>
ログイン後にコピー

以上が私の Go ed25519 公開キーが予想される BEP データと異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!