This page never sends anything anywhere. It reads your file, unlocks it with your passphrase and shows the key — all inside this tab. Disconnect from the internet and it still works. Save this page so it keeps working even if Seal's site ever goes away.
Save it once and you never need this website again. It runs from a file on your own computer — with the internet switched off, and even if Seal's site one day stops existing.
Seal backup v1 - recover the private key without Seal. 1. Read the file as JSON. Fields you need: kdf.salt (base64, 16 bytes), kdf.iterations, cipher.iv (base64, 12 bytes), cipher.ciphertext (base64). Everything else is labels. 2. key = PBKDF2-HMAC-SHA256(password = passphrase as UTF-8, salt, iterations (600000), 32 bytes). 3. seed = AES-256-GCM decrypt with that key, that iv, and ciphertext. WebCrypto stores the 16-byte auth tag at the END of the ciphertext; other libraries want it split off (last 16 bytes) as the tag. A wrong passphrase fails that tag check - that is what "wrong passphrase" means here. The 32-byte result is the wallet's Ed25519 seed. 4. publicKey = Ed25519 public key for that seed. WebCrypto: import PKCS#8 bytes 302e020100300506032b657004220420 + seed (48 bytes) as extractable, export JWK, base64url-decode "x". libsodium / Python: nacl.signing.SigningKey(seed).verify_key. 5. address = base58(publicKey), alphabet 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz. It must equal the file's "address" field - if it doesn't, stop and don't use the key. 6. secretKey = base58(seed + publicKey), 64 bytes. That exact string is the standard Solana private key Phantom, Solflare and Backpack accept under "Import private key". Anyone holding the seed or secretKey can move every coin in the wallet. Never paste it somewhere that asked for it, and never type it into a website.