# From ASCII bytes to CJK ideograms: reversible encoding

> Online steganography tool free based on mojibake: each byte is mapped to a higher Unicode codepoint at random. Illegible at glance, fully reversible.

Free in-browser tool (no upload): https://www.mauriziofonte.it/tools/mojibake

Each byte of input is encoded as a **higher Unicode codepoint** picked at random. Example: an `A` (U+0041) may become U+5E41 (a CJK ideogram). The resulting text is illegible at a glance, but decoding extracts each character's codepoint **modulo 256** to recover the original byte. UTF-8-safe throughout.

## Frequently asked questions

### What is a mojibake tool actually useful for?

Mostly didactic demos of steganography (hiding the existence of a message, not its content) and red team awareness. Real use-case example: a text file full of commentary that looks like 'random CJK ideograms' but is actually readable strings once decoded. Useful for CTFs, security training, or simply for curiosity about Unicode codepoints.

### Why is the output different each time for the same input?

Because the 'k value' (the high Unicode offset) is random per character. Only the Braille preset produces deterministic output (the range has only one high value available, 0x28). All other presets randomize, yielding different output every time. Decoding still works because it's based on modulo 256 of the codepoint, not on the high value.

### Does it support emoji and non-ASCII input?

Yes. Input is first converted to UTF-8 (so an Italian 'è' becomes 2 bytes, an emoji 4 bytes), then each byte is obfuscated. On decode, bytes are rejoined and reinterpreted as UTF-8. Emoji 🎯 🔒, Italian accents (perché, città, più), CJK, Arabic, Hebrew: all supported.

### Is it safe to hide passwords or sensitive info?

NO. Repeat: this is not encryption. Anyone with a JavaScript console can decode your output in 3 seconds. For real protection, use symmetric encryption with a secret key (AES-256-GCM via libsodium) or a decent password manager.

### How does it work technically?

The text is encoded to UTF-8 bytes with `TextEncoder`; each byte then becomes a codepoint of the chosen Unicode block (e.g. CJK ideographs): the original byte is kept in the low 8 bits while the high part of the codepoint is picked randomly within the block. Decoding does the reverse: it extracts the low byte from each character (`codepoint & 0xFF`) and rebuilds the UTF-8 string with `TextDecoder`. The visual effect mimics classic charset-conversion mojibake, but the transformation is a reversible codepoint shift, with no ISO-8859-1 round trip involved.

---
Tool by Maurizio Fonte, senior backend engineer. All tools: https://www.mauriziofonte.it/tools/
