>> (p.1)
    Author Topic: simple script to generate address from private key  (Read 11293 times)
    JeromeS (OP)
    Newbie
    *
    Offline

    Activity: 55
    Merit: 0


    View Profile
    May 29, 2012, 07:23:42 PM
     #1

    OK, so I wanted to have a small script that I can use to generate new (offline) bitcoin addresses and be sure that the information was not stored anywhere or sent to anyone, but I couldn't find anything that does that that's also simple enough that I can read the source code and verify it myself.

    anyway I ended up writing this python 2.5 script (and then decided to upload it here, in case it's useful to anyone else)

    Code:
    import ecdsa

    secp256k1curve=ecdsa.ellipticcurve.CurveFp(115792089237316195423570985008687907853269984665640564039457584007908834671663,0,7)
    secp256k1point=ecdsa.ellipticcurve.Point(secp256k1curve,0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8,0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141)
    secp256k1=ecdsa.curves.Curve('secp256k1',secp256k1curve,secp256k1point,(1,3,132,0,10))

    #--------------------------------------

    import binascii, hashlib

    def addy(pk):
     pko=ecdsa.SigningKey.from_secret_exponent(pk,secp256k1)
     pubkey=binascii.hexlify(pko.get_verifying_key().to_string())
     pubkey2=hashlib.sha256(binascii.unhexlify('04'+pubkey)).hexdigest()
     pubkey3=hashlib.new('ripemd160',binascii.unhexlify(pubkey2)).hexdigest()
     pubkey4=hashlib.sha256(binascii.unhexlify('00'+pubkey3)).hexdigest()
     pubkey5=hashlib.sha256(binascii.unhexlify(pubkey4)).hexdigest()
     pubkey6=pubkey3+pubkey5[:8]
     pubnum=int(pubkey6,16)
     pubnumlist=[]
     while pubnum!=0: pubnumlist.append(pubnum%58); pubnum/=58
     address=''
     for l in ['123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'[x] for x in pubnumlist]:
      address=l+address
     return '1'+address

    Code:
    print addy(0x18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725)
    print addy(int(hashlib.sha256('something small and easy to remember but not easy to guess').hexdigest(),16))
    print addy(int(hashlib.sha256(file('hiddeninplainsight.jpg','rb+').read()).hexdigest(),16))

    The code uses the ecdsa library which can be found here.
    The address function takes a private key and returns the corresponding bitcoin address.

    The last two lines have some practical uses of the address function. Since the sha256 hash function returns a 256 bit long value, it can be used to generate a private key. This is useful if you want to have a bitcoin address and private key that you can remember without having to write it down anywhere, or if you want to use a file that you have on your computer as the key. When you want to spend the coins that you have in that address, all you have to do is use the same function to generate the private key and address.

    WARNING #1: using a file that you have on your computer or a short sentence to generate a private key address pair makes it a lot easier for an attacker to guess your private key. Instead of having to try 2^256 possibilities, they only have to try the files on your computer one by one, or your favorite book/game/your birthday...

    WARNING #2: I just made this script today and I'm fairly new to bitcoin. Use at your own risk !

    woooo five posts i'm outta here
Page 1
Viewing Page: 1