Bitcoin-Core

使用 golang 生成比特幣核心 -rpcauth 參數

  • March 22, 2022

我們正在開發一個區塊鏈部署解決方案kotal,並根據提供的使用者名和密碼生成 -rpcauth 參數。問題是當我們嘗試使用 curl 使用相同的使用者名和密碼時,它會寫入ThreadRPCServer incorrect password attempt from 127.0.0.1:55566.

下面是我們如何從 golang 中的密碼生成 -rpcauth。

user := "kotal"
password = "s3cr3t"

salt := make([]byte, 16)
rand.Read(salt)

hash := hmac.New(sha256.New, salt)
hash.Write([]byte(password))

rpcauth := fmt.Sprintf("%s:%x$%x", user, salt, hash.Sum(nil))

我們的 golang 實現有什麼問題?

您可以使用比特幣核心儲存庫中的腳本或從腳本中獲取靈感,rpcauth腳本正是在 Python 中完成的。

問題是您的鹽是一個字節數組,您直接將其作為 hmac 鍵傳遞,然後列印出十六進制。這將需要比特幣將鹽十六進制解釋為十六進製字元串並將其轉換為十六進製表示的字節。然而,這不是 bitcoind 所做的。

Bitcoind 照原樣使用鹽,並直接使用具有 hmac 密鑰的鹽。所以你需要做同樣的事情——將字節數組轉換為字元串,並使用該字元串的字節作為鍵。

此程式碼有效:

user := "kotal"
password := "s3cr3t"

salt_data := make([]byte, 16)
rand.Read(salt_data)

salt := hex.EncodeToString(salt_data)

hash := hmac.New(sha256.New, []byte(salt))
hash.Write([]byte(password))

rpcauth := fmt.Sprintf("%s:%s$%x", user, salt, hash.Sum(nil))

引用自:https://bitcoin.stackexchange.com/questions/112881