Web Crypto API Key, Cipher & Signature Tester
The Web Crypto API (crypto.subtle) powers browser-based encryption, but its
Promise-driven, ArrayBuffer-heavy interface is verbose and hard to experiment with.
This playground lets you generate keys, encrypt/decrypt, and sign/verify using native
browser cryptography — no boilerplate, no server.
Tool interface
Introduction
The Web Crypto API enables end-to-end encryption, token signing, and secure storage directly in the browser — but experimenting with it usually means writing dozens of lines of boilerplate to convert between ArrayBuffers, Base64, and JWK. This playground removes that friction.
How It Works
- Generate: Calls
crypto.subtle.generateKey()and exports keys as JWK or Base64. - Encrypt/Decrypt: AES-GCM generates a random 12-byte IV; RSA-OAEP uses the public key. Decryption reverses the process.
- Sign/Verify: ECDSA and RSA-PSS sign the UTF-8 encoded data and produce a Base64 signature; verification recomputes and compares.
Privacy
All cryptographic operations run in your browser's secure context via
crypto.subtle. Keys, plaintext, and ciphertext exist only in memory and
are never transmitted. Zero network calls.
Limitations
- Legacy algorithms (DES, RC4, MD5) are not supported — they are intentionally excluded from
crypto.subtle. - Keys exist only in memory; refreshing the page discards them. Copy exported keys to persist.
- For production key management, use a proper KMS or secure enclave — this tool is for testing and learning.
FAQ
Why does AES-GCM need an IV?
The IV (initialization vector) ensures the same plaintext encrypts to different ciphertext each time. Reusing an IV with the same key in GCM mode completely breaks confidentiality and authenticity.
What's the difference between RSA-OAEP and RSA-PSS?
RSA-OAEP is for encryption/decryption. RSA-PSS is for digital signatures. They use different padding schemes optimized for their purpose.
Are my keys uploaded?
No. Everything runs locally in your browser via crypto.subtle. Nothing is transmitted.