반응형
Generating a Bitcoin Private Key and Address
ecdsa 설치 sudo pip install ecdsa
1.소스
import ecdsa import ecdsa.der import ecdsa.util import hashlib import os import re import struct b58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' def base58encode(n): result = '' while n > 0: result = b58[n%58] + result n /= 58 return result def base256decode(s): result = 0 for c in s: result = result * 256 + ord(c) return result def countLeadingChars(s, ch): count = 0 for c in s: if c == ch: count += 1 else: break return count def base58CheckEncode(version, payload): s = chr(version) + payload checksum = hashlib.sha256(hashlib.sha256(s).digest()).digest()[0:4] result = s + checksum leadingZeros = countLeadingChars(result, '\0') return '1' * leadingZeros + base58encode(base256decode(result)) def privateKeyToWif(key_hex): return base58CheckEncode(0x80, key_hex.decode('hex')) def privateKeyToPublicKey(s): sk = ecdsa.SigningKey.from_string(s.decode('hex'), curve=ecdsa.SECP256k1) vk = sk.verifying_key return ('\04' + sk.verifying_key.to_string()).encode('hex') def pubKeyToAddr(s): ripemd160 = hashlib.new('ripemd160') ripemd160.update(hashlib.sha256(s.decode('hex')).digest()) return base58CheckEncode(0, ripemd160.digest()) def keyToAddr(s): return pubKeyToAddr(privateKeyToPublicKey(s)) # Generate a random private key private_key = os.urandom(32).encode('hex') # You can verify the values on http://brainwallet.org/ print "Secret Exponent (Uncompressed) : %s " % private_key print "Private Key : %s " % privateKeyToWif(private_key) print "Address : %s " % keyToAddr(private_key)
결과
반응형
'Block Chain' 카테고리의 다른 글
ethereum cold wallet 생성하기 (0) | 2017.09.26 |
---|---|
bithumb 거래소][ 이더리움 10초마다 opening price값 가져오기 (0) | 2017.09.14 |
public and private blockchain concepts and examples (0) | 2016.08.12 |
Bitcoin: A Peer-to-Peer Electronic Cash System (0) | 2016.08.12 |
block chain source (0) | 2016.08.12 |