Your secrets never leave your device unencrypted.
Unlike traditional "secure" notes, SendCrypted relies on the Web Crypto API, a high-performance, standardized cryptographic engine built directly into your browser. All encryption and decryption happen locally on your computer. Your plaintext data is never transmitted to our server.
When you share a link, it looks like this: .../s/uuid#decryption-key. The part after the # symbol is called a URL Fragment. By design, browsers never send the fragment to the server. This ensures that even if our database or server were compromised, the attacker would not have the keys needed to unlock your data.
We don't just use your passphrase directly. We use PBKDF2 with 100,000 iterations to derive a 256-bit AES key. For every single secret, we generate a unique, 16-byte random Salt. This makes "rainbow table" or pre-computation attacks impossible, as an attacker would have to brute-force each secret individually from scratch.
We use AES-256-GCM. Beyond just hiding your data, GCM (Galois/Counter Mode) provides integrity. This means the browser can mathematically prove that the data has not been tampered with or modified while stored on the server. If even a single bit of the encrypted blob is changed, decryption will fail.
While the randomly generated URL key provides high entropy and strong security on its own, you can add an optional Passphrase. This provides two key benefits:
Our Go-based backend is designed with a minimal attack surface: