На веб-сайте blockchain.info есть система онлайн-кошелька MyWallet , которая создает резервные копии с расширением .aes.json. Хотя я понимаю, что это файл json, зашифрованный с помощью AES с использованием моей парольной фразы, я все еще не понимаю, что мне делать, чтобы расшифровать его и загрузить в локальный клиент.
У меня OSX 10.6, но ради переносимости давайте просто поговорим о командной строке, надеясь, что она хотя бы останется одинаковой на разных платформах.
Я написал небольшой скрипт на Python, который можно использовать для расшифровки вашего зашифрованного MyWallet. Он делает то же самое, что и MyWallet JavaScript , только на Python.
Редактировать: приведенный ниже код кажется устаревшим, вот рабочая версия на май 2012 года.
Скопируйте следующее в файл, сделайте его исполняемым, затем запустите:
#!/usr/bin/env python
import base64, hashlib, hmac, json, sys, getpass
from Crypto.Cipher import AES
from Crypto.Hash import RIPEMD, SHA256
base58_chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
def prompt(p):
return getpass.getpass(p + ": ")
def decrypt(encrypted, password):
encrypted = base64.b64decode(encrypted)
iv, encrypted = encrypted[:16], encrypted[16:]
length = len(encrypted)
encrypted += ' ' * (15 - (length-1)%16)
hash = (hmac.new(password, iv + "\x00\x00\x00\x01", hashlib.sha1).digest() +
hmac.new(password, iv + "\x00\x00\x00\x02", hashlib.sha1).digest())[:32]
clear = AES.new(hash, AES.MODE_OFB, iv).decrypt(encrypted)[:length]
return clear
def base58_decode(v):
value = 0; ret = ''
for c in v: value = value*58 + base58_chars.find(c)
for i in range(32):
ret = "%c"%(value%256) + ret; value /= 256
return ret
def base58_encode(v):
value = 0; ret = ''
for c in v: value = value*256 + ord(c)
while value > 0:
ret = base58_chars[value%58] + ret; value /= 58
return ret
def to_sipa(s):
version = 128 # or 239 for testnet
key = chr(version) + base58_decode(s)
return base58_encode(key + SHA256.new(SHA256.new(key).digest()).digest()[:4])
clear = decrypt(prompt("encrypted wallet"), prompt("password"))
obj = json.loads(clear)
if (obj.has_key('double_encryption')):
print("wallet uses double encryption")
password = obj['sharedKey'].encode('ascii') + prompt("2nd password")
for key in obj['keys']: key['priv'] = decrypt(key['priv'], password)
for key in obj['keys']: key['priv_sipa'] = to_sipa(key['priv'])
print(json.dumps(obj, indent=4, sort_keys = True))
Он запросит резервную копию кошелька и один или два пароля, в зависимости от того, является ли кошелек одинарным или двойным шифрованием. Вставьте резервную копию кошелька, а не сохраняйте ее в файл.
Вам, вероятно, понадобится Python 2.x. Мне не удалось найти пакет материалов pycrypto для Python 3. Очевидно, он будет доступен в предстоящем «точном» выпуске Ubuntu .
Изменить: кажется, что формат резервной копии был изменен, поэтому этот скрипт не работает с последними резервными копиями.
Я не знаю, как это сделать через командную строку, но вы можете использовать инструмент на
https://blockchain.info/DecryptWallet.html
http://pastehtml.com/view/bprww2t3g.html
Он простой, но кроссплатформенный и выполняет свою работу. Вы также можете сохранить его в автономном режиме.
Piuk только что выпустил патч для MultiBit, который позволяет импортировать файлы blockchain.info «json» и «aes.json».
Этот патч был включен в MultiBit 0.3.4. Вот инструкция:
Экспорт кошелька с blockchain.info -> Импорт в MultiBit
1) Сделайте экспорт кошелька из blockchain.info
2) Импортируйте в MultiBit, используя экран «Импорт закрытых ключей».
2.1) В окне выбора файла вы выбираете суффикс файла blockchain.info «.json» или «.aes.json».
2.2) Выберите файл экспорта blockchain.info, который вы хотите импортировать.
2.3) Добавьте либо один пароль, либо оба пароля, если он зашифрован дважды.
2.4) Нажмите «Импортировать закрытые ключи».
Поскольку в экспорте blockchain.info нет дат создания закрытого ключа, мне, к сожалению, приходится воспроизводить блоки из блока генезиса (это занимает пару часов), так что это скорее вариант «выйти из тюрьмы», чем то, что вы бы использовали. дня в день.
Я взял код с Blockchain.info и преобразовал его в отдельный файл javascript , который можно запускать с помощью node.js.
Были некоторые проблемы, так как исходный код не обрабатывал неправильные пароли, и мой код теперь имеет единственную функцию check_password(encrypted_json, password)
, которая возвращает true, если он может его расшифровать, и false, если нет.
Теперь моя цель — взять вышеизложенное и использовать его для восстановления пароля друга. Я создам список всех комбинаций, которые он мог выбрать, и протестирую его с помощью этого скрипта.
Вот еще одна оболочка, также сделанная в node.js, похожая на ответ выше от ripper234. Этот работает со стандартным вводом, поэтому вы можете использовать внешний инструмент для передачи значений: https://github.com/salibhai1/bitcoin-bruteforce-decrypt
Крис Мур
Крис Мур
о0'.
о0'.
Крис Мур
Андрей Федоров
Крис Мур
Андрей Федоров
Крис Мур
Крис Мур
Андрей Федоров
потрошитель234
потрошитель234
Crypto:Cypher
, поскольку новичку в Python немного сложно установить его в Windows. Я работаю над этим, просто справедливое предупреждение для новичков.