Store flow
The API sanitizes and validates text, enforces a body limit, creates a random key and IV, encrypts with AES-256-GCM, and persists only ciphertext plus the authentication data.
Open-source encrypted text service
Open sourceStore encrypted text, keep the identifier and key, retrieve it when needed.
A compact Node.js and Express service that validates text, encrypts it with AES-256-GCM before persistence, and retrieves it through a human-readable identifier plus a 256-bit key.

The brief
Create the smallest understandable store-and-retrieve flow for text while keeping persisted message content encrypted and protecting the API from basic abuse.
The service has to make two unusual credentials, a generated phrase and a long hexadecimal key, understandable to a user while validating input and never writing plaintext messages to storage.
What was built
The current project favors a lightweight interface and a small, inspectable Node.js codebase. The portfolio treatment turns its identifier, key, IV, ciphertext, and authentication tag into a visual system.
The API sanitizes and validates text, enforces a body limit, creates a random key and IV, encrypts with AES-256-GCM, and persists only ciphertext plus the authentication data.
A cryptographically selected five-word identifier is paired with a 64-character key so the stored message can be located and decrypted later.
Requests are rate limited per IP, identifiers and keys are pattern-validated, and authenticated decryption rejects incorrect keys or altered data.
Request flow
Validate text, enforce the size limit, and apply the per-IP request window.
Generate a random 256-bit key and a 12-byte initialization vector.
Encrypt on the server and produce ciphertext plus an authentication tag.
Persist the identifier, timestamp, IV, tag, and ciphertext, never the plaintext.
Validate the identifier and key, authenticate the payload, then return decrypted text.
Design decisions
AES-256-GCM protects confidentiality and detects a wrong key or modified ciphertext during retrieval.
Five randomly selected words make the lookup identifier easier to transfer while the separate key retains cryptographic strength.
Express, JSON storage, and a framework-free frontend keep the prototype direct and easy to inspect.
The outcome
Next case study 01 / 04
Ajdinović Gradnja.