萊特幣地址是如何生成的?
萊特幣地址是如何生成的?他們使用什麼雜湊?
例如,比特幣地址是這樣生成的: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 字元串。這是最常用的萊特幣地址格式
$ 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/