How to Make a Colour Cipher

This post is part of a series on making a magical treasure hunt for you and your friends.

With this technique, your treasure hunters will find a message and must read it through a coloured overlay. Here’s the awesome part: if they use the wrong colour, they’ll still get a valid message, but it will point them in the wrong direction.

How do the players know what colour to use? Each colour-cipher message comes with a tiny bottle of fluid. Lighting the fluid afire yields a flame of the proper colour.

This post details how to make the secret message. (See also how to make coloured flames.)

Secret messages

The message cipher consists of a series of arrays of numbers, like so:

( 59.5 + 42.5 + 56.5 ) ( 65.5 + 45.5 + 51.5 ) ( 57.5 + 52.5 + 63.5 )

The players will lay a colour transparency over the numbers to cancel out one colour. The remaining numbers will be added up in each group, and that sum will correspond to one written character.

Canceling out the red numbers above, then adding the remaining numbers gives you the following sums: ( 102 ) ( 117 ) ( 110). The ASCII values for these numbers are: ( f ) ( u ) ( n ). Therefore the message is ‘fun’. Canceling the blue will give you ‘cat’, and canceling the green will give you ‘toy’.

I chose to use ASCII codes to map numbers to characters (because ASCII includes punctuation, not just letters), but you can use any cipher you like.

Auto-encode your messages using this webpage

I wrote a programme to handle all the calculations for you, so you can just enter your messages (one per line), and the series of number arrays will be generated automatically for you.

This form encodes your messages based on ASCII codes. If you would rather use some other cipher, skip down to the next section and learn how to do the calculations by hand.

Messages (as many as you like, one per line):

Colours (one per line, hexadecimal RGB values):

How does it work?

Make a list of messages you wish to encode. One of them should be the true instruction, and the rest should be red herrings (misleading messages). You can include as many messages as you want; each array in the encoded series will have as many numbers as there are messages. The messages don’t need to be the same length, but it’s better if they’re roughly the same length.

Each array in the series holds the information for one character for each of the encoded messages. E.g. the first array can be decoded to yield the first character for any of the messages.

Say we have 3 messages (1 real message, 2 red herrings). That means there should be three colours. Say the first character of the messages are {F, I, S} respectively. Each array holds three numbers (we’ll give them the variables a, b, c), one of which will be ignored, due to the overlay. Then what we want is:

omitting c: 1a + 1b + 0c = 70 (ASCII F)
omitting a: 0a + 1b + 1c = 73 (ASCII I)
omitting b: 1a + 0b + 1c = 83 (ASCII S)

So what are a, b, and c? We can solve the system of equations with a matrix:

1 1 0 70
0 1 1 73
1 0 1 83

This transforms to the following, using the Gauss-Jordan method:

1 1 0 70
0 1 1 73
0 0 1 43

So c = 43. And the rest is simple from there (a = 40, b = 30). The first array in the series, then will look like this:

(40 + 30 +43)

Of course, the encoding process becomes crazy when you have 5 or more messages. And it becomes tedious when you have long messages. Consequently, it’s best to use the automated generator.

Leave a comment

Your email address will not be published. Required fields are marked *