Crypto Lab

// AES • LEGACY • HASHING • VERIFICATION

A learning and checksum bench. Not a way to protect a real secret. Browser JavaScript has no key isolation, no secure memory and no way to erase a key once it exists. Anything you type here lives in process memory and can reach swap, a crash dump or a session restore. Nothing is transmitted, which is not the same thing as being safe. Open for the full scope limits.

What this tool actually does

Runs hashes and symmetric ciphers in the page so you can see their output, compare a checksum, or convert between formats. It is a teaching and inspection bench.

Hash verification. The matcher performs a case-insensitive comparison against all generated outputs. A match proves integrity, that the data has not changed, not authenticity, who sent it. Those are different properties and only one of them is on this page.

What "client-side only" does and does not buy you

All operations occur within the browser's JavaScript engine, and no data is transmitted. That protects you from one specific threat, a server operator, and from nothing else.

  • Keys are resident in browser memory during execution, and JavaScript strings are immutable, so a key cannot be overwritten or zeroed after use. It sits there until the garbage collector decides otherwise.
  • There is no secure memory. No page locking, so the key can be paged to swap or captured in a crash dump or hibernation file.
  • Anything in the page is visible to anything in the browser, including extensions with host access, devtools, and a session restore that recovers what you typed.
  • Copying a key or a ciphertext puts it on the system clipboard, which is shared with every other application and often with clipboard history.
  • No constant-time guarantees. A JavaScript implementation makes no claim about timing side channels, and this page is not the place to reason about them.

Algorithms here that are broken, legacy, or a trap

  • MD5 and SHA-1 are cryptographically broken. Practical collision attacks exist. Use them only for legacy checksums or non-security identifiers; use SHA-256 or SHA-3 for anything security relevant.
  • DES and RC4 are obsolete and present here to be looked at, not used. A 56-bit key is brute-forceable, and RC4 is labelled insecure in its own option text.
  • ECB mode leaks structure. Identical plaintext blocks produce identical ciphertext blocks, which is why the mode is a textbook illustration rather than a choice.
  • A passphrase is not a key. Passphrase mode derives one through the OpenSSL EVP_BytesToKey routine, a single MD5-based pass, which is not a modern key derivation function. A real KDF is Argon2, scrypt or PBKDF2 with a high iteration count.
  • None of this is authenticated. There is no GCM, no encrypt-then-MAC. Ciphertext produced here can be modified in transit and will decrypt to something, silently.
  • IV reuse breaks confidentiality. In raw mode you choose the IV, and reusing one across messages under the same key is the classic way to lose everything the cipher was doing for you.

Raw AES keys and IVs are validated by byte length, not character count. Multibyte characters, such as emoji or accented letters, count as 2 to 4 bytes each; the counter shows actual byte usage.

Never use this for

  • Protecting real secrets: credentials, private keys, personal data, health records, financial records, or anything you would mind losing.
  • Anything under a regulatory regime, including PCI DSS, HIPAA and GDPR obligations over personal data.
  • Password storage. Passwords need a slow, salted password-hashing function, not a fast general-purpose hash.
  • Signing, authentication, key agreement or key generation for anything in production.
  • Evidence of file integrity in a legal, forensic or compliance chain of custody.
  • Deciding that a file is safe, or that a message is genuine.

What to use instead when it matters

Use the platform's own primitives rather than a page: the Web Crypto API for browser work, the operating system keystore for key material, and an authenticated construction such as AES-GCM or a modern AEAD. Derive keys with a real KDF. For anything that protects other people, have the design reviewed by someone who does security for a living, and prefer a vetted library over any implementation you assembled from a tool like this one.

Input Data

1. Select Algorithm
Key Method
Mode
Key Size
Secret Key (Raw UTF-8)
0/16 Invalid
Initialization Vector (IV)
0/16 Invalid
Output Format

A teaching bench, not a safe. Output here is unauthenticated, so it can be modified in transit and will still decrypt to something. Keys typed into this page live in browser memory and cannot be erased. Use the Web Crypto API and an authenticated cipher for anything that protects real data.

Output
-