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
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’srun/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.pyreads 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’stools/folder, for formats the 2john family doesn’t cover as cleanly:metamask2hashcat.py,exodus2hashcat.py,bisq2hashcat.py.extract-*.py— btcrecover’s scripts in itsextract-scripts/folder. These produce btcrecover’s ownbc:-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 / file | Extract the line | hashcat mode |
|---|---|---|
| wallet.dat — Bitcoin Core, Litecoin, Dogecoin, BCH, Dash | bitcoin2john.py wallet.dat > wallet.hash | -m 11300 |
| Electrum — wallet file | electrum2john.py <file> > e.hash | Follows the $electrum$N prefix: 1/2/3 → -m 16600 · 4 → -m 21700 · 5 → -m 21800 |
Blockchain.com — wallet.aes.json | blockchain2john.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 / HD | multibit2john.py <file> > mb.hash | -m 22500 (.key) · -m 27700 (.wallet) · -m 22700 (HD) |
| MetaMask — extension/mobile vault | metamask2hashcat.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 Desktop — seed.seco | exodus2hashcat.py seed.seco > ex.hash | -m 28200 |
Bisq — .wallet | bisq2hashcat.py bisq.wallet > bisq.hash | -m 29800 |
Ethereum keystore — UTC--*.json | ethereum2john.py UTC--*.json > eth.hash (remove any filename: prefix) | -m 15600 (PBKDF2) · -m 15700 (scrypt) |
BIP38 paper key — 6P… | No hashcat mode | btcrecover --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 26600will 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.pyextractors; 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)
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.