Bitcoin Forum
June 30, 2024, 03:40:33 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 [2]  All
  Print  
Author Topic: Como usar paper wallet?  (Read 12783 times)
Adriano
Moderator
Legendary
*
Offline Offline

Activity: 1285
Merit: 1085



View Profile
September 17, 2014, 04:07:56 PM
 #21

[...]

nuss! Seria fácil? Eu nem saberia nem por onde começar Embarrassed

Na verdade, acho que eu iria começar tentando com final 00000, depois iria incrementando 00001, etc, até ZZZZZ... mas iria demorar uns milhões de anos manualmente... Cry

Eu faria isso também, já que são 58 caracteres por posição e 5 posições, dariam 58^5 combinações = 656,356,768 tentativas, e em cada tentativa eu desconstruiria o base58 e faria a verificação do checksum da privkey, isso executa muito rápido.
Eu acho que levaria mais tempo pra escrever o programa do que pra executá-lo, e olha que são só 5 loops aninhados, umas 20 ou 30 linhas de código.

É uma pena que os programadores Brasileiros não estejam se interessando muito pelo Bitcoin pois só os programadores podem realmente contemplar a beleza desse software.

Fiz um programinha para brincar com essa situação. Não manjo muito de python, então se alguém tiver alguma crítica ou sugestão fico feliz em escutar.

Além do que vocês já comentaram, estou embaralhando os caracteres válidos apenas para não seguir sequencialmente (a vantagem é que podemos contar com a sorte para acelerar o processo, a desvantagem é que seria necessário gravar a ordem parar reiniciar o processamento em caso de eventual interrupção).

O programa utiliza uma função recursiva para permitir qualquer número de caracteres faltando no final da chave privada. O número de processos concorrentes é definido na linha
Code:
pool = Pool(2)
Para melhor performance sugiro utilizar o número de cores do equipamento onde será executado.

Coloquei o programinha agora para rodar, como utiliza apenas CPU deve demorar um tempo razoável para identificar a chave correta.

Code:
#!/usr/bin/python

import hashlib, binascii, random
from multiprocessing import Pool

t='123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
x='5JxQMrZfkuGKJTupDYUqjziwqdsPLtm94LdPChskdVdM'

def check(privKey):
  if(len(privKey) < 51):
    for n in random.sample(t, len(t)):
      if(check(privKey+n)):
        return True
  else:
    if(validwif(privKey)):
      print privKey
      return True
   
def numtowif(numpriv):
 step1 = '80'+hex(numpriv)[2:].strip('L').zfill(64)
 step2 = hashlib.sha256(binascii.unhexlify(step1)).hexdigest()
 step3 = hashlib.sha256(binascii.unhexlify(step2)).hexdigest()
 step4 = int(step1 + step3[:8] , 16)
 return ''.join([t[step4/(58**l)%58] for l in range(100)])[::-1].lstrip('1')

def wiftonum(wifpriv):
 return sum([t.index(wifpriv[::-1][l])*(58**l) for l in range(len(wifpriv))])/(2**32)%(2**256)

def validwif(wifpriv):
 return numtowif(wiftonum(wifpriv))==wifpriv

if(__name__ == '__main__'):
  if(len(x) < 51):
    pool = Pool(2)
    for n in random.sample(t, len(t)):
      pool.map(check, [x+n])
    pool.close
    pool.join
  else:
    check(x)

Para quem quiser informações adicionais, sugiro dar uma olhada em

https://en.bitcoin.it/wiki/Private_key
https://en.bitcoin.it/wiki/Wallet_import_format


Abraço,

Adriano

--
algorista
Hero Member
*****
Offline Offline

Activity: 882
Merit: 1000


It's got electrolytes


View Profile
September 17, 2014, 09:18:40 PM
 #22

[...]
Fiz um programinha para brincar com essa situação.
[...]


Você não é normal não meu amigo Grin seu dia deve ter mais que 24h kkk  Cheesy

+---------=====[ Rm 12:21 ]=====---------+
Pages: « 1 [2]  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!