Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- from Crypto.Cipher import AES
- import scrypt
- from pybitcointools import *
- import binascii
- import time
- import itertools
- alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
- if bytes == str: # python2
- iseq = lambda s: map(ord, s)
- bseq = lambda s: ''.join(map(chr, s))
- buffer = lambda s: s
- def b58decode(v):
- ## https://pypi.python.org/pypi/base58/
- '''Decode a Base58 encoded string'''
- if not isinstance(v, str):
- v = v.decode('ascii')
- origlen = len(v)
- v = v.lstrip(alphabet[0])
- newlen = len(v)
- p, acc = 1, 0
- for c in v[::-1]:
- acc += p * alphabet.index(c)
- p *= 58
- result = []
- while acc >= 256:
- acc, mod = divmod(acc, 256)
- result.append(mod)
- result.append(acc)
- return (bseq(result) + b'\0' * (origlen - newlen))[::-1]
- def bip38_decrypt(passphrase):
- ## https://github.com/nomorecoin/python-bip38-testing/blob/master/bip38.py
- '''BIP0038 non-ec-multiply decryption. Returns WIF privkey.'''
- d = b58decode("6PfQoEzqbz3i2LpHibYnwAspwBwa3Nei1rU7UH9yzfutXT7tyUzV8aYAvG")
- d = d[2:]
- flagbyte = d[0:1]
- d = d[1:]
- compressed = False
- addresshash = d[0:4]
- d = d[4:-4]
- key = scrypt.hash(passphrase, addresshash, N=16384, r=8, p=8)
- derivedhalf1 = key[0:32]
- derivedhalf2 = key[32:64]
- encryptedhalf1 = d[0:16]
- encryptedhalf2 = d[16:32]
- aes = AES.new(derivedhalf2)
- decryptedhalf2 = aes.decrypt(encryptedhalf2)
- decryptedhalf1 = aes.decrypt(encryptedhalf1)
- priv = decryptedhalf1 + decryptedhalf2
- priv = binascii.unhexlify('%064x' % (long(binascii.hexlify(priv), 16) ^ long(binascii.hexlify(derivedhalf1), 16)))
- pub = privtopub(priv)
- if compressed:
- pub = encode_pubkey(pub, 'hex_compressed')
- wif = encode_privkey(priv, 'wif_compressed')
- else:
- wif = encode_privkey(priv, 'wif')
- addr = pubtoaddr(pub)
- if hashlib.sha256(hashlib.sha256(addr).digest()).digest()[0:4] == addresshash:
- print wif
- return wif
- ## ASCII range (if the key is encrypted with UTF-8, it's not worth trying).
- your_list = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
- gen = itertools.combinations_with_replacement(your_list, 4)
- def test():
- for password in gen:
- bip38_decrypt(password[0]+password[1]+password[2]+password[3])
- import thread
- thread.start_new_thread(test, ())
- thread.start_new_thread(test, ())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement