首頁 >後端開發 >Golang >為什麼我的 Go ed25519 公鑰與預期的 BEP 資料不同?

為什麼我的 Go ed25519 公鑰與預期的 BEP 資料不同?

Patricia Arquette
Patricia Arquette原創
2024-10-31 07:23:291035瀏覽

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

為ed25519 密鑰產生公鑰匹配BEP

問題:

問題:使用Go crypto/ed🎜>問題:

使用Go cr ,產生的公鑰與使用BEP 資料的測試案例中提供的預期公鑰不同。

原因:

ed25519 存在不同的私鑰格式。 BEP 資料使用 64 個位元組雜湊私鑰,而 G​​o 套件使用 32 個位元組雜湊私鑰(以 32 個位元組種子為前綴)。

解決方案:

雖然無法將 BEP 私鑰轉換為 Go 格式,但可以建立 Go 函式庫的修改版本來處理 BEP 中使用的雜湊私鑰。

  1. 程式碼修改:
  2. 修改後的程式碼包括以下函數:
<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>

getPublicKey:從64 位元組散列私鑰產生公鑰產生公用公鑰鑰。 sign:計算使用雜湊私鑰、公鑰和訊息進行簽署。

<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>
用法:使用此修改後的程式碼,可以執行測試案例,證明產生的公鑰和簽章與預期的BEP 資料匹配:

以上是為什麼我的 Go ed25519 公鑰與預期的 BEP 資料不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn