Lastleaf

Recovery Toolkit
When the original tool is gone,
you can still open your own notes.
An independent decryptor for Meld Encrypt. Algorithm constants reproduced 1:1 from the official source. Everything runs locally in your browser — passwords and ciphertext never leave this page.
Before you use this This tool exists for future you. Make sure: ① this page is cached or saved locally, ② a copy lives in a trusted repository or archive, and ③ you opened it from a source you control. If not, stop and verify.

01 Whole-Note Decryption

FileData · JSON · v1.0 / v2.0
A Meld Encrypt whole-note file is JSON with version, hint, and encodedData fields, typically with a .md extension.
Plaintext Output

02 Inline Fragment Decryption

Inline · %%🔐 / %%🔐α / %%🔐β
Wrapped in %%...%% or prefixed with 🔐α / 🔐β — both are auto-detected. Without a prefix, v2 is assumed.
Plaintext Output

03 Algorithm Archive

For Future Reference

The three constant sets below are reproduced exactly from Meld Encrypt's src/services/CryptoHelper*.ts. The full decryption logic lives in the <script> tag below — view source to audit.

v0 · Obsolete · earliest format
prefix : 🔐 / %%🔐
key    = SHA-256(utf8(password))
iv     = [196,190,240,190,188,78,41,132,15,220,84,211]   // 12 bytes, hardcoded
cipher = AES-256-GCM(key, iv).encrypt(utf8(text))
output = base64(cipher)
v1 · CryptoHelper · legacy whole-note + α inline
prefix : 🔐α / %%🔐α    ·    FileData "version": "1.0"
salt   = utf8("XHWnDAT6ehMVY2zD")              // 16 bytes, hardcoded
key    = PBKDF2-SHA256(utf8(password), salt, 1000) → AES-256
iv     = random(16)
cipher = AES-256-GCM(key, iv).encrypt(utf8(text))
output = base64(iv ‖ cipher)
v2 · CryptoHelper2304 · current default
prefix : 🔐β / %%🔐β    ·    FileData "version": "2.0"
salt   = random(16)
iv     = random(16)
key    = PBKDF2-SHA512(utf8(password), salt, 210000) → AES-256
cipher = AES-256-GCM(key, iv).encrypt(utf8(text))
output = base64(iv ‖ salt ‖ cipher)