Heim >Backend-Entwicklung >Golang >Warum weicht mein öffentlicher Go ed25519-Schlüssel von den erwarteten BEP-Daten ab?

Warum weicht mein öffentlicher Go ed25519-Schlüssel von den erwarteten BEP-Daten ab?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-31 07:23:291035Durchsuche

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

Generieren von Public Key Matching BEP für ed25519-Schlüssel

Problem:
Verwendung des Go crypto/ed25519-Pakets , der generierte öffentliche Schlüssel unterscheidet sich von dem erwarteten, der in einem Testfall unter Verwendung der BEP-Daten bereitgestellt wurde.

Ursache:
Für ed25519 gibt es unterschiedliche private Schlüsselformate. Die BEP-Daten verwenden einen 64-Byte-gehashten privaten Schlüssel, während das Go-Paket einen 32-Byte-gehashten privaten Schlüssel (mit dem 32-Byte-Seed vorangestellt) verwendet.

Lösung:
Obwohl es nicht möglich ist, die privaten BEP-Schlüssel in das Go-Format zu konvertieren, kann eine modifizierte Version der Go-Bibliothek erstellt werden, um die im BEP verwendeten gehashten privaten Schlüssel zu verarbeiten.

Codeänderung:

Der geänderte Code enthält die folgenden Funktionen:

  1. getPublicKey: Erzeugt den öffentlichen Schlüssel aus einem 64-Byte-gehashten privaten Schlüssel.
  2. sign: Berechnet den Signatur unter Verwendung des gehashten privaten Schlüssels, des öffentlichen Schlüssels und der Nachricht.
<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>

Verwendung:

Mit diesem modifizierten Code kann der Testfall ausgeführt werden , was zeigt, dass der generierte öffentliche Schlüssel und die Signatur mit den erwarteten BEP-Daten übereinstimmen:

<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>

Das obige ist der detaillierte Inhalt vonWarum weicht mein öffentlicher Go ed25519-Schlüssel von den erwarteten BEP-Daten ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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