ForgotWalletPassword.com

Tools · the extraction step

Convert a wallet to a hashcat hash

hashcat does not read wallet files — it works on a one-line hash that an extraction script pulls out of your wallet first. This page covers where those scripts live, the exact command for every major wallet format, how to verify the line, and the errors that follow a mismatch.

By Robbert Bink · ~9 min read · Published 10 August 2026 · Last reviewed: 14 August 2026

The headline

hashcat doesn’t read wallet files — it tests one-line hashes, so a separate script must extract that line from your wallet first: salt, KDF parameters and a verification value, nothing else. For most formats one command does it — bitcoin2john.py wallet.dat > wallet.hash, then hashcat -m 11300 wallet.hash. Ethereum keystores need the step too: ethereum2john.py converts the JSON — hashcat does not read the raw file.

The short answer

Every wallet format has one extraction script that produces the line hashcat needs, and one mode number that matches it. Three script families cover the formats on this site:

  • *2john.py — the extractors in John the Ripper jumbo’s run/ folder. Many of their outputs work in both John and hashcat after formatting cleanup. Ethereum keystores are the clearest case where the conversion is required: ethereum2john.py reads the UTC JSON and produces the $ethereum$p*…/$ethereum$s*… line that both hashcat (modes 15600/15700) and John need — hashcat does not read the raw JSON. Examples: bitcoin2john.py, electrum2john.py, blockchain2john.py, multibit2john.py.
  • *2hashcat.py — the extractors in hashcat’s tools/ folder, for formats the 2john family doesn’t cover as cleanly: metamask2hashcat.py, exodus2hashcat.py, bisq2hashcat.py.
  • extract-*.py — btcrecover’s scripts in its extract-scripts/ folder. These produce btcrecover’s own bc:-style base64 for --data-extract, not a hashcat line. They are the right tool for the btcrecover path, and the wrong tool for the hashcat path.

The recipes below use the first two families. If the conversion step feels like a project of its own, that is the strongest argument for btcrecover instead — it does the extraction internally and reads these wallets directly. The hashcat path earns its keep when you have a specific mask or wordlist attack in mind.

Why extraction exists

hashcat is a general-purpose cracker, not a wallet parser. Each mode number corresponds to one hash type — 11300 is Bitcoin/Litecoin wallet.dat, 26600/26610/26620/31900 cover the MetaMask vault generations, and so on. The extraction script reduces your wallet to the small piece hashcat actually needs: the salt, the KDF parameters (like the iteration count), and a verification value that a correct password reproduces. An extracted hash is not normally a plaintext private key, but it can contain highly sensitive encrypted wallet material — for some formats, possession of the extracted data together with the recovered password may be sufficient to expose wallet secrets. Treat every extracted hash as sensitive as the original wallet file.

The one-line recipes

Copy the wallet file to a working folder first, then run the extractor and redirect its output into a text file. The commands assume Python 3 and the script in your current folder or PATH:

Wallet / fileExtract the linehashcat mode
wallet.dat — Bitcoin Core, Litecoin, Dogecoin, BCH, Dashbitcoin2john.py wallet.dat > wallet.hash-m 11300
Electrum — wallet fileelectrum2john.py <file> > e.hashFollows the $electrum$N prefix: 1/2/3 → -m 16600 · 4 → -m 21700 · 5 → -m 21800
Blockchain.comwallet.aes.jsonblockchain2john.py <file> > bc.hash-m 12700 (legacy My Wallet) · -m 15200 (v2/v3) · -m 18800 (2nd password) · very early V0: -m 34700 (identify first)
MultiBit — Classic .key / .wallet / HDmultibit2john.py <file> > mb.hash-m 22500 (.key) · -m 27700 (.wallet) · -m 22700 (HD)
MetaMask — extension/mobile vaultmetamask2hashcat.py --vault vault.json > mm.hash — the extractor reads the KDF parameters from the vault-m 26600 (legacy extension) · -m 26610 (newer dynamic-iteration) · -m 31900 (mobile) — 26620 only in newer/development hashcat builds; use the modes your installed version supports
Exodus Desktopseed.secoexodus2hashcat.py seed.seco > ex.hash-m 28200
Bisq.walletbisq2hashcat.py bisq.wallet > bisq.hash-m 29800
Ethereum keystoreUTC--*.jsonethereum2john.py UTC--*.json > eth.hash (remove any filename: prefix)-m 15600 (PBKDF2) · -m 15700 (scrypt)
BIP38 paper key — 6P…No hashcat modebtcrecover --bip38-enc-privkey

Then run hashcat against the extracted file, for example: hashcat -m 11300 wallet.hash words.txt -r rules/best66.rule. The full attack setup — masks, wordlists, rules — is on the hashcat walkthrough.

Verify the line before you run

Three quick checks catch nearly every “it doesn’t work” moment:

  • The marker matches the mode. The line should start with the right prefix: $bitcoin$… for 11300, $electrum$… for the Electrum modes, $blockchain$… for 12700/15200, $metamask$… for the MetaMask modes. A $bitcoin$ line with -m 26600 will never load.
  • Strip the filename prefix. Several 2john scripts print wallet.dat:$bitcoin$64$… — hashcat needs only the part after the colon. The hashcat forum gives this as the most common formatting mistake.
  • Compare with the example hashes. hashcat’s example-hashes page shows exactly what a valid line looks like per mode. If your line looks nothing like the example, the mode is wrong or extraction failed.

Common errors — and the real cause

  • “No hashes loaded” — the mode number doesn’t match the hash type in the line. Check the marker and the example hashes before changing anything else.
  • “Separator unmatched” — a malformed line, almost always a leftover filename prefix or a line that was wrapped when copied. Re-run the extractor with a clean redirect.
  • Extractor produces nothing — the wallet may simply not be encrypted. Bitcoin Core, for example, only encrypts wallet.dat after you set a password; an unencrypted wallet has no password hash to extract. That is not a tool failure.

Every one of these has a step-by-step fix on the troubleshooting index.

When you don’t need this page

  • Ethereum keystores — btcrecover reads them directly (the simpler route). If you choose the hashcat path, the conversion is one command: ethereum2john.py UTC--*.json > eth.hash — hashcat does not read the raw JSON.
  • btcrecover — it parses the wallet internally, so no hash line is ever needed. The walkthrough is the simpler route for most people.
  • John the Ripper — it uses the same *2john.py extractors; the JtR walkthrough covers its side of the same lines.

Safety note

Extraction and cracking both run fully offline on your own machine. The extracted line is not normally a plaintext private key, but for some formats it contains sensitive encrypted wallet material — possession of the extract together with the recovered password may be enough to expose wallet secrets. Treat it like the wallet file: keep it local, never paste it into a public checker or unknown website, and delete the working copy when you’re done. Anyone who asks you to upload a “hash” or wallet file to a public checker or unknown website is not running a safe recovery — a legitimate remote route works through a clear written process with the extract line, never through random uploads. The file safety rules apply to hash lines exactly as they do to wallet files.

Frequently asked questions

How do I convert wallet.dat to a hashcat hash?

Run bitcoin2john.py wallet.dat > wallet.hash, then use hashcat -m 11300 wallet.hash. bitcoin2john.py ships in John the Ripper jumbo’s run folder and produces the $bitcoin$… line mode 11300 needs.

Why does hashcat say “No hashes loaded”?

The mode number does not match the hash type in the extracted line — for example a $bitcoin$ line run with the wrong mode. Check that the line starts with the right marker ($bitcoin$, $electrum$, $blockchain$…) and compare it with the example hashes for your mode.

Is the extracted hash line a private key?

Not normally. The extracted line contains the salt, KDF parameters and a verification value that candidate passwords are tested against. It is not a plaintext private key, but for some formats it contains encrypted wallet material that, together with the recovered password, can expose wallet secrets. Treat every extracted hash as sensitive as the original wallet file.

Cite this page

APA: Bink, R. (2026). Convert a wallet to a hashcat hash. ForgotWalletPassword.com. https://forgotwalletpassword.com/convert-wallet-to-hashcat-hash

Markdown: [Convert a wallet to a hashcat hash](https://forgotwalletpassword.com/convert-wallet-to-hashcat-hash)

Missing something, or spot an error? Tell us — every correction is checked and applied.
Was this guide helpful?

Keep going — it’s all free

Not sure what you lost or what’s possible?

Take the quick diagnosis for a first verdict — it stops early when the answer is already clear — then work the search checklist. Everything here is informative, runs offline, and is free to use.