Treasure Trails/Guide/Ciphers

From Illerai
Jump to navigation Jump to search

Ciphers are a method of encrypting information. In Old School RuneScape, ciphers are used as a step in a Treasure Trail. They use a Caesar shift in order to encrypt an NPC's name.

A Caesar shift is a change of location in the regular alphabet, for example ABC becomes BCD if shifted once to the right/forward.

To solve a more difficult shift (26 combinations) here is a method: we must first count the number of times a letter appears within the cipher. For this example, the clue "BMJ UIF LFCBC TFMMFS" will be used. Make a list of the letters and how many times they appear:

  • B = 2
  • M = 3
  • J = 1
  • U = 1
  • I = 1
  • F = 4
  • L = 1
  • C = 2
  • T = 1
  • S = 1

As we can see, "F" is the most common letter within the cipher. Now, the letter "E" is the most common letter in the English language, so we always presume the most common letter in the cipher is "E" as our starting letter. It may turn out to not be the case, but it's a good place to start. So, because "F" is our most common letter in the cipher - we can presume "F" = "E". Once this presumption is made, we write out the entire alphabet in the correct order.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Next, under the letter "E", we write "F" because we think that letter "F" in the cipher is equal to "E" in the alphabet, and then fill out the rest of the alphabet starting from "F" and then looping back to the start once we reach "Z" to give us all letters like such:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

B C D E F G H I J K L M N O P Q R S T U V W X Y Z A

So, we now have a table of sorts where the ciphered letters are on the bottom row, and the corresponding alphabet letter is on the top. So, if our cipher had the letter "Z" in it, for example, we could look for "Z" on the bottom row - look up and see that Z = Y. Now, we have this table; we can see if we are correct in our presumption that "e" was indeed "f" in the cipher. Remember - to decipher, you look at the ciphered message letter on the bottom and then read whatever the top letter is to read what it actually means. If you are enciphering a message, it would be the opposite way round. In our example and using the above table, our "BMJ UIF LFCBC TFMMFS" clue becomes "ALI THE KEBAB SELLER".

Now, in this example - our presumption that "e" is equal to "f" on the grounds the "f" is the most common letter in the cipher and that "e" is the most common letter in English was true - and "e" became our key to the cipher. However, in others it may not be so easy. For example - in the clue "ZCZL", "e" is not the key as that returns the answer "EHEQ". While it is possible it is doubly encrypted, we should explore other alternate keys instead. The next port of call if "e" is not the key is to use vowels, namely "A, E, I, O, U and Y" - as every word in English contains at least one of those letters. If we try using "A" as the key to the cipher, we get "Adam" - which is correct. However, if this was not the case - you should work your way through all vowels. If one of these is not the key, then go through the rest of the letters periodically until you find your solution.

Cipher Solvers

Another way to solve Caesar ciphers is by brute-forcing them, i.e. to try every possible decryption. This is hard to do by hand, but easy with programming. The following program will print all 26 possibilites, of which only one of them will decrypt to a meaningful phrase.

Python

def caesar(text, shift):
    alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    shifted_alphabet = alphabet[shift:] + alphabet[:shift]
    translation_map = str.maketrans(alphabet, shifted_alphabet)
    return text.translate(translation_map)

encrypted_phrase = "ESBZOPS QJH QFO"

for shift in range(26): print(shift, caesar(encrypted_phrase, shift))

Lua

function caesar(text, shift)
    out, subst = text:gsub('%a', function(s)
        local base = s:lower() == s and ('a'):byte() or ('A'):byte()
        return string.char((s:byte() - base + shift) % 26 + base)
    end)
    return out
end

local phrase = "ESBZOPS QJH QFO"

for shift = 0, 25 do print(string.format('%i %s', shift, caesar(phrase, shift))) end

Ruby

str = "ESBZOPS QJH QFO".chars
26.times do |i|
  p str.join('').upcase.tr(("A".."Z").to_a.join, ("A".."Z").to_a.rotate(i).join)
end

This prints the following table:

0 ESBZOPS QJH QFO
1 FTCAPQT RKI RGP
2 GUDBQRU SLJ SHQ
3 HVECRSV TMK TIR
4 IWFDSTW UNL UJS
5 JXGETUX VOM VKT
6 KYHFUVY WPN WLU
7 LZIGVWZ XQO XMV
8 MAJHWXA YRP YNW
9 NBKIXYB ZSQ ZOX
10 OCLJYZC ATR APY
11 PDMKZAD BUS BQZ
12 QENLABE CVT CRA
13 RFOMBCF DWU DSB
14 SGPNCDG EXV ETC
15 THQODEH FYW FUD
16 UIRPEFI GZX GVE
17 VJSQFGJ HAY HWF
18 WKTRGHK IBZ IXG
19 XLUSHIL JCA JYH
20 YMVTIJM KDB KZI
21 ZNWUJKN LEC LAJ
22 AOXVKLO MFD MBK
23 BPYWLMP NGE NCL
24 CQZXMNQ OHF ODM
25 DRAYNOR PIG PEN

where the last decrypted text is the one we want.

X Marks the Spot

Cipher Solution Location
ESBZOPS QJH QFO Draynor Pig Pen Draynor Village, north of the market.

Medium Ciphers

Cipher Solution Location Challenge answer
HQNM LZM STSNQ Ironman tutor Lumbridge 666
BMJ UIF LFCBC TFMMFS Ali the Kebab seller Pollnivneach 399
ECRVCKP MJCNGF Captain Khaled Large eastern building in Port Piscarilius 5
GUHCHO Drezel Paterdomus Temple; Drezel can be found in the cave north of the Paterdomus Temple, which lies next to Canifis. Drezel is also an NPC for several quests (fairy code CKS and then go north-west to the end of the bridge, where you can climb down the trapdoor to find Drezel) 7
QSPGFTTPS HSBDLMFCPOF Professor Gracklebone Arceuus Library, ground floor[UK]1st floor[US] (fairy ring code CIS) 9
XJABSE USBJCPSO Wizard Traiborn Wizards' Tower, 1st floor[UK]2nd floor[US] (fairy ring code DIS) 3150

Hard Ciphers

Cipher Solution Location Challenge answer
GBJSZ RVFFO Fairy Queen Fairy Resistance Hideout (requires Fairytale II - Cure a Queen quest to be finished, use a fairy ring with the codes AIR, DLR, DJQ, and AJS in that order) Puzzle box
HCKTA IQFHCVJGT Fairy Godfather Zanaris throne room (requires you to have started Fairytale I - Growing Pains) 64
OVEXON Eluned Outside Lletya or north-east of the Tyras Camp; requires you to have started Regicide quest (after talking to the Elf Tracker). After completion of Song of the Elves, she can be found in the city of Prifddinas north of the dye trader. 53,000
UZZU MUJHRKYYKJ Otto Godblessed Otto's Grotto 3
VTYR APCNTGLW King Percival Fisher Realm - requires partial completion of the Holy Grail quest (fairy ring code BJR, then run south up into the castle). He can be found on the second story of the castle. 5
ZHLUG ROG PDQ Weird Old Man

Kalphite Lair entrance (north-west of fairy ring BIQ)

150
ZSBKDO ZODO Pirate Pete On the dock north-east of the Ectofuntus Puzzle box
IWPPLQTP Gunnjorn Barbarian Outpost Agility course Puzzle box
BSOPME MZETQPS Arnold Lydspor Piscatoris Fishing Colony general store/bank (requires completion of Swan Song) (North of fairy ring AKQ) Puzzle box
BXJA UNJMNA YRCAR Soar Leader Pitri 1st floor[UK]2nd floor[US] of the Hunter Guild (requires completion of Children of the Sun and Hunter 46 ) (North-west of fairy ring AJP) Puzzle box