Private-Key
Java:將 256 位私鑰轉換為 WIF 的方法?
我有一個關於 Java 和 sha-256 的問題。
我嘗試執行此處描述的這些步驟來創建 WIF 密鑰: https ://en.bitcoin.it/wiki/Wallet_import_format
- 步:
字元串字元串 = “0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D”;
- 步驟(前面的廣告 80):
字元串=“80”+字元串;
- 執行 sha-256:
- 這是我的錯誤。我可以在第 2 步執行 sha-256,但結果是錯誤的。原因似乎是對字元串而不是二進制執行雜湊。我得到:
e2e4146a36e9c455cf95a4f259f162c353cd419cc3fd0e69ae36d7d1b6cd2c09
但我應該得到:
8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592
我不知道如何將其轉換為二進制。有人能幫我嗎?
它與此處的問題相同(將 256 位私鑰轉換為 WIF 的正確方法?)但我不明白答案。我也無法回复該主題,因為我沒有足夠的聲譽。
謝謝 :)
您應該將字節的十六進製表示轉換為字節數組(而不是字元串到字節數組)。然後做雜湊。然後將字節數組轉換回字元串中字節的十六進製表示。
整個解決方案將如下所示:
import java.security.*; class HashExample { public static void main(String[] args) throws NoSuchAlgorithmException { String string = "0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D"; string = "80" + string; byte[] data = hexStringToByteArray(string); byte[] digest = MessageDigest.getInstance("SHA-256").digest(hexStringToByteArray(string)); String result = bytesToHex(digest); System.out.println(result); //prints: 8147786c4d15106333bf278d71dadaf1079ef2d2440a4dde37d747ded5403592 } public static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); } return data; } private static String bytesToHex(byte[] bytes) { StringBuffer result = new StringBuffer(); for (byte b : bytes) result.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1)); return result.toString(); } }
當然這只是一個例子。在生產程式碼中,我建議使用可以執行此任務的可用庫之一。