dark mode light mode Search Menu
Search

Loopy Secret Messages

RestrictedData on flickr

Every letter, digit, and punctuation mark in every human language (and a few non-human ones!) has a corresponding number to represent it inside the computer. In the old days these were ASCII codes, which ranged from 0 to 127, and mostly only worked for English. Nowadays we use a much larger set called Unicode. Unicode has over 140 thousand characters, but you can still find the ASCII set within it: codes 0 to 127 are exactly the same as the old ASCII set (see Table 1).


Table 1. Unicode codes 32 through 127 (the printable ASCII set).

We can use these numeric codes to easily encode and decode secret messages. One well-known way to do this is called ROT-13, because it “rotates” the alphabet 13 places, mapping A to N, B to O, and so on. If you go past the end of the alphabet, you just wrap around: so M maps to Z, N maps to A, and O maps to B. Because our alphabet has 26 letters, and 13 is exactly half of 26, if you apply this mapping twice, you get back the original message.

You can make your own secret message encoder/decoder using MiniScript! If you have Mini Micro already, you can use edit and run to create the program in Listing 1. If not, you can do it just as well on the Try It! page at https://miniscript.org/tryit/ . In either case, type the program in carefully, being sure to match the capitalization and punctuation shown.

msg = input("Message: ")
result = ""
for c in msg
num = c.code
if num >= 97 and num <= 122 then num = num + 13 if num > 122 then num = num - 26
else if num >= 65 and num <= 90 then num = num + 13 if num > 90 then num = num - 26
end if
result = result + char(num)
end for
print result

Listing 1. ROT-13 encoder/decoder

When the program runs, it will prompt you to type in a message. Enter anything you like, and if it’s plain language, it will return it as ROT-13 gibberish. Send that to a friend or save it as a note to yourself. Then, when you type or paste in ROT-13 text, it will convert it back into plain text.

The program works by looping over every character in the message (lines 3-13). It uses the code method to get the Unicode value that corresponds to each character on line 4, and store this in a variable called num. Then — referring to Table 1 — we use an if/else structure to check if the character is a lowercase letter (lines 5-7) or an uppercase letter (lines 8-10). If it’s one of these, we add 13 to the number, and if it goes past the end of the alphabet, subtract 26 to get it back in range. Finally, the numeric code is converted back into a character with the char function, and added to the result on line 12.

Want to take this program further? Try adding a while true/end while loop around the whole thing, so that you can encrypt/decrypt many messages without having to run the program for each one. Happy coding!

Learn More

ROT-13

https://en.wikipedia.org/wiki/ROT13

What is ROT-13?

https://www.cs.mcgill.ca/~rwest/wikispeedia/wpcd/wp/r/ROT13.htm

ROT-13 Cipher

http://practicalcryptography.com/ciphers/rot13-cipher/

Numeric Codes

https://www.yourarticlelibrary.com/computer-science/number-system/numeric-codes-definition-and-classification/85197

What is a substitution cipher?

https://en.wikipedia.org/wiki/Substitution_cipher

Substitution Cipher video

https://www.youtube.com/watch?v=1P8Xpxm76e8

Substitution Cipher Kids

https://academickids.com/encyclopedia/index.php/Substitution_cipher

ASCII codes

https://en.wikipedia.org/wiki/ASCII

ASCII Table

https://theasciicode.com.ar/

What is Unicode?

https://en.wikipedia.org/wiki/Unicode

Unicode explained

https://betterexplained.com/articles/unicode/