SCREAM CIPHER ("ǠĂȦẶAẦ ĂǍÄẴẶȦ")
44 comments
·September 18, 2025sixhobbits
I did something similar a while back but using all the invisible characters to encode extra data into telegram messages for metadata storage
franga2000
I was very confused why this would be useful for Telegram messages, but the Why? part of the readme makes perfect sense. Great workaround for a stupid limitation!
adv0r
it had to be done https://chatgpt.com/g/g-68ce9419c7d4819190f82744d6e2741e-url...
fainpul
One could use emojis instead, then the message could be hidden in plain sight in places where emoji-spam is common.
cluckindan
Emojis have a high overhead, a single emoji is typically 4 bytes but may be up to 35 bytes.
foofoo12
Yikes! Imagine if people were to start sending photos and videos to each other!
rawling
PenguinRevolver
Oh god, now we're gonna have two different standards for a scream cypher https://xkcd.com/927/
codeulike
Ah its from XKCD (feb 2025), bit odd of the OP not to mention that
codeulike
Ảặậậ ạẵaạǡ ȧặaậậā ǎẩạặȧặǡạǎẩẳ, a áǎạ ầẫȧặ ằȁẩ ạẫ ȁǡặ ạẵaẩ ȦẪẠ13
dsjoerg
Ǎ ăẫẩǡǎắặȧ ǎạ a ăẵaậậặẩẳặ áặằẫȧặ ạẵặ ảẵẫậặ ẵȁầaẩ ȧaăặ! Aẩắ Ǎ aǎẩ'ạ ẳẫẩẩa ậẫǡặ.....
blueflow
... in the same sense that ROT13 or base64 would be a cipher.
hennell
Rot 13 is a cipher. It's a substitution cipher, and more specifically a shift cypher or Caesar cipher. It's not a secure cipher but it is one.
Base64 is an encoding. It's an algorithm, no attempt at secrecy, thus not a cipher.
cluckindan
And thus we arrive at SCREAM64 encoding, base64 in scream cipher.
foofoo12
Sweet Lord Jesus.
blueflow
And what do you think is the algorithm from the article? Looks awfully similar to base64 to me, except its lacking the bit-shifts. Both use a lookup table like that.
jeroenhd
The original Caesar cipher supposedly also had a constant offset, yet it's still considered a cipher.
A bad substitution cipher is still a cipher. Just one you shouldn't use for anything important.
andy99
JdeBP
… and no, since neither the enciphering nor the deciphering do a 1:1 mapping for all possible input code points.
amenhotep
That's not a requirement. Pigpen is a substitution cipher.
blueflow
First sentence:
> with the help of a key
So, where is the key?
bradrn
In the code in this article, the key is the mapping stored in ‘CIPHER’.
shakna
The key is the data table, representing which each character encodes to or from.
JdeBP
First, second, and third statements of the provided source code.
personalcompute
Ăặȧạaǎẩậā ȧẫạ13, áaǡặ64, aẩắ ạẵǎǡ ẩặả ǡăȧặaầ ăǎäẵặȧ aȧặ aậậ ǎẩǡặăȁȧặ, áȁạ ạẵặā ắẫ ầặặạ ạẵặ ạặăẵẩǎăaậ ắặằǎẩǎạǎẫẩ ẫằ a ăǎäẵặȧ.
ginko
Now pack even more info in each character with Zalgo text.
permo-w
am I unusual in not really seeing the "creepiness" of zalgo text?
faeyanpiraat
Maybe you missed this piece of the internet history: https://stackoverflow.com/a/1732454
lambdaone
Think of it as representing something like the letters actively 'creeping' and giving off tendrils of darkness. Does this help?
Retr0id
It's not inherently creepy but often symbolic of corruption or someone talking in a raspy/synthetic "evil overlord" kind of voice.
jomarry
[dead]
jomarry
[dead]
null
There are also a little over 256 unicode Combining Marks that each have a 2-byte UTF-8 encoding. I picked a set of them, defining an encoding I call zalgo256:
https://gist.github.com/DavidBuchanan314/07da147445a90f7a049...
Since an arbitrarily tall stack of combining characters still counts as one grapheme cluster, if some application limits string length by counting grapheme clusters then you can stuff an unlimited amount of data in there, with "only" 2x overhead in the byte representation.
Unfortunately HN filters some of the codepoints so I can't demonstrate here. Since I chose "A" as the base character which the diacritics are stacked on, it has a similar aesthetic to the SCREAM cipher although a little more zalgo-y.