Encrypt and decrypt: AES-GCM, ChaCha20-Poly1305, AES-CBC
Encrypt text with AES-GCM or ChaCha20-Poly1305, or decrypt what it produced. Leave the key blank and a random one is made for you.
Using this from the terminal
Every tool here also answers a plain POST with JSON. From a terminal your input goes to this server, unlike on the page, which runs everything in your browser.
curl https://cipher.corpberry.com/encrypt -d algo=aes-gcm -d key=000102030405060708090a0b0c0d0e0f -d text=hello curl https://cipher.corpberry.com/encrypt -d mode=decrypt -d algo=aes-gcm -d key=000102030405060708090a0b0c0d0e0f --data-urlencode data=…
POST only. algo is aes-gcm, chacha20-poly1305 or aes-cbc; key_enc hex or base64; enc (plaintext) utf8, hex or base64; data_enc auto, base64 or hex. Optional nonce (hex), aad and aad_enc. The API runs on this server, so the key travels; this page doesn't send it anywhere.
From an AI agent (MCP): https://mcp.corpberry.com/mcp/cipher · setup
How the output is laid out, and why there's no passphrase
nonce ‖ ciphertext ‖ tag for AES-GCM and ChaCha20-Poly1305 (12-byte nonce, 16-byte tag), iv ‖ ciphertext for AES-CBC (16-byte IV, PKCS#7 padding). Decrypt reads the same layout, so the output of one is the input of the other.
The key is exact bytes: 16, 24 or 32 for AES, 32 for ChaCha20-Poly1305, never padded or cut to fit. A passphrase is not a key: derive one with Argon2id or PBKDF2 on the Passwords page (the last $ part of its output is a 32-byte key in base64), or make a random one on the Random page.
For test data and interop checks. A key that protects real data belongs in your secret store, not in any web page, this one included.