Title: Casascius python upgrade
Post by: stalker00075 on February 18, 2019, 05:52:15 PM
help please, who is strong in python need get address of the private key wiki code python import random import hashlib
BASE58 = '23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
def Candidate(): """ Generate a random, well-formed mini private key. """ return('%s%s' % ('S', ''.join( [BASE58[ random.randrange(0,len(BASE58)) ] for i in range(29)])))
def GenerateKeys(numKeys = 10): """ Generate mini private keys and output the mini key as well as the full private key. numKeys is The number of keys to generate, and """ keysGenerated = 0 totalCandidates = 0 while keysGenerated < numKeys: try: cand = Candidate() # Do typo check t = '%s?' % cand # Take one round of SHA256 candHash = hashlib.sha256(t).digest() # Check if the first eight bits of the hash are 0 if candHash[0] == '\x00': privateKey = GetPrivateKey(cand) print('\n%s\nSHA256( ): %s\nsha256(?): %s' % (cand, privateKey, candHash.encode('hex_codec'))) if CheckShortKey(cand): print('Validated.') else: print('Invalid!') keysGenerated += 1 totalCandidates += 1 except KeyboardInterrupt: break print('\n%s: %i\n%s: %i\n%s: %.1f' % ('Keys Generated', keysGenerated, 'Total Candidates', totalCandidates, 'Reject Percentage', 100*(1.0-keysGenerated/float(totalCandidates))))
def GetPrivateKey(shortKey): """ Returns the hexadecimal representation of the private key corresponding to the given short key. """ if CheckShortKey(shortKey): return hashlib.sha256(shortKey).hexdigest() else: print('Typo detected in private key!') return None
def CheckShortKey(shortKey): """ Checks for typos in the short key. """ if len(shortKey) != 30: return False t = '%s?' % shortKey tHash = hashlib.sha256(t).digest() # Check to see that first byte is \x00 if tHash[0] == '\x00': return True return False GenerateKeys (1)
nowSKhHHQLDkHsAniFW2MRyVw9jwDDkKx SHA256( ): ae172028e80ef37d3e01906ccd05441946c3efa9e4532ab20f5a6e25ce293840 sha256(?): 0057497a02482464d757500773d3d2c26badbcd94d5081d1cff9ea7c16fd2175 Validated. needSKhHHQLDkHsAniFW2MRyVw9jwDDkKx SHA256( ): ae172028e80ef37d3e01906ccd05441946c3efa9e4532ab20f5a6e25ce293840 sha256(?): 0057497a02482464d757500773d3d2c26badbcd94d5081d1cff9ea7c16fd2175 Address: 17bYqJpPz3huoXuz6Dx6iLejuAHA2k2q3HValidated.
Title: Re: Casascius python upgrade
Post by: darosior on February 18, 2019, 08:28:35 PM
help please, who is strong in python need get address of the private key wiki code python import random import hashlib
BASE58 = '23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
def Candidate(): """ Generate a random, well-formed mini private key. """ return('%s%s' % ('S', ''.join( [BASE58[ random.randrange(0,len(BASE58)) ] for i in range(29)])))
def GenerateKeys(numKeys = 10): """ Generate mini private keys and output the mini key as well as the full private key. numKeys is The number of keys to generate, and """ keysGenerated = 0 totalCandidates = 0 while keysGenerated < numKeys: try: cand = Candidate() # Do typo check t = '%s?' % cand # Take one round of SHA256 candHash = hashlib.sha256(t).digest() # Check if the first eight bits of the hash are 0 if candHash[0] == '\x00': privateKey = GetPrivateKey(cand) print('\n%s\nSHA256( ): %s\nsha256(?): %s' % (cand, privateKey, candHash.encode('hex_codec'))) if CheckShortKey(cand): print('Validated.') else: print('Invalid!') keysGenerated += 1 totalCandidates += 1 except KeyboardInterrupt: break print('\n%s: %i\n%s: %i\n%s: %.1f' % ('Keys Generated', keysGenerated, 'Total Candidates', totalCandidates, 'Reject Percentage', 100*(1.0-keysGenerated/float(totalCandidates))))
def GetPrivateKey(shortKey): """ Returns the hexadecimal representation of the private key corresponding to the given short key. """ if CheckShortKey(shortKey): return hashlib.sha256(shortKey).hexdigest() else: print('Typo detected in private key!') return None
def CheckShortKey(shortKey): """ Checks for typos in the short key. """ if len(shortKey) != 30: return False t = '%s?' % shortKey tHash = hashlib.sha256(t).digest() # Check to see that first byte is \x00 if tHash[0] == '\x00': return True return False GenerateKeys (1)
nowSKhHHQLDkHsAniFW2MRyVw9jwDDkKx SHA256( ): ae172028e80ef37d3e01906ccd05441946c3efa9e4532ab20f5a6e25ce293840 sha256(?): 0057497a02482464d757500773d3d2c26badbcd94d5081d1cff9ea7c16fd2175 Validated. needSKhHHQLDkHsAniFW2MRyVw9jwDDkKx SHA256( ): ae172028e80ef37d3e01906ccd05441946c3efa9e4532ab20f5a6e25ce293840 sha256(?): 0057497a02482464d757500773d3d2c26badbcd94d5081d1cff9ea7c16fd2175 Address: 17bYqJpPz3huoXuz6Dx6iLejuAHA2k2q3HValidated. Hi, why do you generate your private key in base58 ? If you are looking for an example I made a tutorial here (https://www.insacoin.org/blog/shiba-lion-third/) and (kind of) a Python library here (https://github.com/darosior/bitcoineasy/blob/995b98f9c440aa4fa3c428750f51b7a59b327fad/bitcoineasy/keys.py#L7).
Title: Re: Casascius python upgrade
Post by: stalker00075 on February 18, 2019, 09:11:52 PM
hi, can you please try to change the code import random import hashlib
BASE58 = '23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
def Candidate(): """ Generate a random, well-formed mini private key. """ return('%s%s' % ('S', ''.join( [BASE58[ random.randrange(0,len(BASE58)) ] for i in range(29)])))
def GenerateKeys(numKeys = 10): """ Generate mini private keys and output the mini key as well as the full private key. numKeys is The number of keys to generate, and """ keysGenerated = 0 totalCandidates = 0 while keysGenerated < numKeys: try: cand = Candidate() # Do typo check t = '%s?' % cand # Take one round of SHA256 candHash = hashlib.sha256(t).digest() # Check if the first eight bits of the hash are 0 if candHash[0] == '\x00': privateKey = GetPrivateKey(cand) print('\n%s\nSHA256( ): %s\nsha256(?): %s' % (cand, privateKey, candHash.encode('hex_codec'))) if CheckShortKey(cand): print('Validated.') else: print('Invalid!') keysGenerated += 1 totalCandidates += 1 except KeyboardInterrupt: break print('\n%s: %i\n%s: %i\n%s: %.1f' % ('Keys Generated', keysGenerated, 'Total Candidates', totalCandidates, 'Reject Percentage', 100*(1.0-keysGenerated/float(totalCandidates))))
def GetPrivateKey(shortKey): """ Returns the hexadecimal representation of the private key corresponding to the given short key. """ if CheckShortKey(shortKey): return hashlib.sha256(shortKey).hexdigest() else: print('Typo detected in private key!') return None
def CheckShortKey(shortKey): """ Checks for typos in the short key. """ if len(shortKey) != 30: return False t = '%s?' % shortKey tHash = hashlib.sha256(t).digest() # Check to see that first byte is \x00 if tHash[0] == '\x00': return True return False GenerateKeys (1)
Title: Re: Casascius python upgrade
Post by: Coding Enthusiast on February 19, 2019, 05:22:58 AM
a Python library here (https://github.com/darosior/bitcoineasy/blob/995b98f9c440aa4fa3c428750f51b7a59b327fad/bitcoineasy/keys.py#L7).
why are you rounding N (https://github.com/darosior/bitcoineasy/blob/995b98f9c440aa4fa3c428750f51b7a59b327fad/bitcoineasy/keys.py#L4)? That is not the correct value. I am not really familiar with python but you may need to change sizeof(x) and sizeof(y) here (https://github.com/darosior/bitcoineasy/blob/995b98f9c440aa4fa3c428750f51b7a59b327fad/bitcoineasy/keys.py#L69-L74) to a hardcoded value '32' instead since x and y can be less than 32 bytes but you must return them with zeros appended. Here is a unit test that must pass: Private key: 128b87b572c379e92d8dd9f2f89118ec0bd8fe7ad6214312486d572d8718f8c7 public key: 04C7F4A880E496EE7335424E9613E7B29D37CEF9151DE1751D44E9159C699E07A20038BF72B3FF4FC35F1A6FF2E43F56DC4D5743BE3AFF67F1A7C5F6A9F227B47C
To OP: You need to use another library on top of this one. You call your GetPrivateKey(shortKey) function with your mini private key and it will return an actual private key in hexadecimal formal. Then pass that into a key function in that library. Check out https://github.com/warner/python-ecdsa for example.
|