Wallets

嚴重的問題!web3j-android EckeyPair 返回的私鑰長度為 63 個字元,而不是 64

  • April 10, 2018

所以這是我以前遇到過的一個非常大的問題:

我正在使用 web3j-android,我正在使用 ECKeyPair 類生成隨機私鑰和公鑰的過程

現在我知道私鑰通常應該是隨機的 64 長度字元串,但每隔一段時間(它在大約 200 次測試中發生了兩次)我會得到這個:

在此處輸入圖像描述

請注意這裡的愚蠢有兩個原因:

1 - 如您在日誌中所見,密鑰經過三重驗證,為 63 個字元

2 - 仍然會產生一個 40 字元長度的公共地址,這很奇怪,因為如果我的私鑰是 63 個字元,那怎麼會發生呢?

我認為這是一個嚴重的錯誤,因為如果它默默地發生並且我相信它是好的,我根本無法簽署交易,更不用說導入錢包,私鑰將無效。我發送到公共地址的乙太幣將永遠失去。

險惡的部分是,乍一看,這一切似乎都是有效的。鍵僅關閉 1 個字元。我只是碰巧注意到它,因為我在 android studio 的 IDE 上玩字元計數器。

我可以執行檢查以確保生成的字元串是 64 字元,但我的首要問題是為什麼會發生這種情況?

如果你選擇一個介於 0 到 9,999 之間的隨機數,它通常是 4 位數長,但如果你偶爾得到 312(只有 3 位數)這樣的結果,你也不會感到太驚訝。

同樣,如果您選擇一個介於 1 和 0xffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 (有效私鑰的範圍)之間的數字並且它的長度有時小於 64 位,您也不應該感到驚訝。

63 位的私鑰是完全有效的,因此,如果您在使用它簽署交易時遇到問題,這可能表明進行簽名的程式碼中存在錯誤。也許您需要添加前導零(例如將“312”變成“0312”)來解決這樣的錯誤。

引用自:https://ethereum.stackexchange.com/questions/45310