Litecoin

萊特幣地址是如何生成的?

  • February 19, 2019

萊特幣地址是如何生成的?他們使用什麼雜湊?

例如,比特幣地址是這樣生成的:https ://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses

我正在尋找這樣的答案,但在任何地方都找不到。任何萊特幣搜尋都會出現比特幣連結。

請不要給我萊特幣地址生成網站或錢包下載。我想知道如何手動編寫萊特幣地址生成器。

萊特幣使用完全相同的程序來生成地址,唯一的區別是網路前綴。

在第 4 步**(在 RIPEMD-160 雜湊前面添加版本字節)**而不是0x00用於比特幣

0x30對於萊特幣主網或

0x6F用於萊特幣測試網。

您的地址應以 L 開頭,並且將是有效的萊特幣地址。

全序列:

0 - 擁有私有 ECDSA 密鑰

18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725

1 - 取對應生成的公鑰(65字節,1字節0x04,32字節對應X座標,32字節對應Y座標)

0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

2 - 對公鑰執行 SHA-256 散列

600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408

3 - 對 SHA-256 的結果執行 RIPEMD-160 散列

010966776006953D5567439E5E39F86A0D273BEE

4 - 在 RIPEMD-160 雜湊前添加版本字節(0x30用於萊特幣主網)

30010966776006953D5567439E5E39F86A0D273BEE

(請注意,以下步驟是 Base58Check 編碼,它有多個可用的庫選項來實現它)

5 - 對擴展的 RIPEMD-160 結果執行 SHA-256 雜湊

27872C1C5DF98F26A09EEBE7A048A52CCFFD647098EACDB6D5D48563B0DBE7B4

6 - 對前一個 SHA-256 雜湊的結果執行 SHA-256 雜湊

713B731B0E30DDD0B6E1F73E2EA2A1E298A35BBDB37FF13C593028515C3B2B50

7 - 取第二個 SHA-256 雜湊的前 4 個字節。這是地址校驗和

713B731B

8 - 在階段 4 的擴展 RIPEMD-160 散列的末尾添加階段 7 的 4 個校驗和字節。這是 25 字節的二進制萊特幣地址。

30010966776006953D5567439E5E39F86A0D273BEE713B731B

9 - 使用 Base58Check 編碼將結果從字節字元串轉換為 base58 字元串。這是最常用的萊特幣地址格式

LKKSCYdyWP7fJDMZ1KUDbpj3yPmQ22MQrv

$ python3.6 ltc_address_generator.py 0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6
LKKSCYdyWP7fJDMZ1KUDbpj3yPmQ22MQrv

請嘗試以下 py 腳本,並為您的公鑰生成一個ltc 地址。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import hashlib
import base58


def sha256(hexstr):
   """sha256 hash algorithm
   """
   return hashlib.new('sha256', bytes.fromhex(hexstr)).hexdigest()


def rip160(hexstr):
   """ripemd160 hash algorithm
   """
   return hashlib.new('ripemd160', bytes.fromhex(hexstr)).hexdigest()


def get_ltc_address(pubkey):
   """https://bitcoin.stackexchange.com/questions/65282/how-is-a-litecoin-address-generated
   """
   rip160_hash = "30" + rip160(sha256(pubkey.upper()).upper()).upper()
   sha256_hash = sha256(sha256(rip160_hash).upper()).upper()
   return base58.b58encode(bytes.fromhex(rip160_hash + sha256_hash[0:8]))


if __name__ == '__main__':
   import sys

   if len(sys.argv) != 2:
       print("[*] Usage: python %s publickey")
       sys.exit(1)

   print(get_ltc_address(sys.argv[1]))

# references
# https://en.bitcoin.it/wiki/Protocol_documentation#Addresses
# https://gist.githubusercontent.com/circulosmeos/97f2c155777434081cb56886c1b608be/raw/f960b4e89e86dcdf77fb6288c1005a7cb847cc98/easy-litecoin-address-from-public-key.py
# https://bitcoin.stackexchange.com/questions/65282/how-is-a-litecoin-address-generated
# https://bitcoin.stackexchange.com/questions/56923/is-this-how-to-generate-a-bitcoin-address-with-python
# https://iancoleman.io/bip39/

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