Skip to content

Commit 22ecfce

Browse files
authored
Merge pull request #2 from CSESoc-CompClub/Anneliese/caesar-and-rot13-cipher
Anneliese - caesar and rot13
2 parents 044172b + 2693f12 commit 22ecfce

3 files changed

Lines changed: 140 additions & 0 deletions

File tree

src/SUMMARY.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# Summary
22
- [🐸 CIPHERS 🐸](ciphers/ciphers.md)
33
- [🕵️ SUBSTITUTION CIPHERS](ciphers/3_substitution_ciphers.md)
4+
- [🔒 CAESAR CIPHER](ciphers/caesar_cipher.md)
5+
- [🔑 ROT13 CIPHER](ciphers/rot13.md)
46
---

src/ciphers/caesar_cipher.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# 🔒 CAESAR CIPHER 🔒
2+
The Caesar cipher is a substitution cipher where each letter in the plaintext is shifted by a fixed number of places down the alphabet.
3+
4+
## How It Works
5+
- Choose a shift value (e.g., 3).
6+
- Replace each letter with the letter that is `shift` positions down the alphabet.
7+
- Wrap around to the beginning of the alphabet if necessary.
8+
- USE YOUR CIPHER WHEEL!
9+
10+
## Decrypting Caesar Ciphers
11+
> [!SUCCESS] Task
12+
> Decrypt the following ciphers. Note that **punctuation matters** when inputting your answers. Upper and lower case does not matter.
13+
>
14+
> The following all use a Caesar cipher with different shift values.
15+
16+
### Cipher 1
17+
Y qcapcr kcqqyec uyq upgrrcl ml rfc uyjjq md rfc aytcpl, uygrgle dmp qmkcmlc ajctcp clmsef rm qmjtc gr.
18+
19+
<!-- Shift: 3 -->
20+
<div class="answer-box">
21+
<input class="answer-input" type="text" id="answerinput1" placeholder="Enter your answer">
22+
<button class="answer-button" onclick="checkAnswer('answerinput1', 'result1', 'QSBzZWNyZXQgbWVzc2FnZSB3YXMgd3JpdHRlbiBvbiB0aGUgd2FsbHMgb2YgdGhlIGNhdmVybiwgd2FpdGluZyBmb3Igc29tZW9uZSBjbGV2ZXIgZW5vdWdoIHRvIHNvbHZlIGl0Lg==')">Check Answer</button>
23+
</div>
24+
25+
<div id="result1"></div>
26+
27+
### Cipher 2
28+
Oek adem jxqj vuubydw oek wuj mxud oekhu ijqdtydw yd q xywx fbqsu... ikttud khwu je zkcf?... Y tedj xqlu yj. - Sqfjqyd Zqsa Ifqhhem.
29+
30+
<!-- Shift: 3 -->
31+
<div class="answer-box">
32+
<input class="answer-input" type="text" id="answerinput2" placeholder="Enter your answer">
33+
<button class="answer-button" onclick="checkAnswer('answerinput2', 'result2', 'WW91IGtub3cgdGhhdCBmZWVsaW5nIHlvdSBnZXQgd2hlbiB5b3VyZSBzdGFuZGluZyBpbiBhIGhpZ2ggcGxhY2UuLi4gc3VkZGVuIHVyZ2UgdG8ganVtcD8uLi4gSSBkb250IGhhdmUgaXQuIC0gQ2FwdGFpbiBKYWNrIFNwYXJyb3cu')">Check Answer</button>
34+
</div>
35+
36+
<div id="result2"></div>
37+
38+
### Cipher 3
39+
Liztqvo, pwtl ug pivl. Vwbpqvo jmiba i Rmb bew pwtqlig, ivl zqopb vwe gwc kiv aidm nqnbg xwcvla xmz xmzawv. Bpiba bew pcvlzml xwcvla wnn nwz i niuqtg wn nwcz.
40+
41+
<!-- Shift: 3 -->
42+
<div class="answer-box">
43+
<input class="answer-input" type="text" id="answerinput3" placeholder="Enter your answer">
44+
<button class="answer-button" onclick="checkAnswer('answerinput3', 'result3', 'RGFybGluZywgaG9sZCBteSBoYW5kLiBOb3RoaW5nIGJlYXRzIGEgSmV0IHR3byBob2xpZGF5LCBhbmQgcmlnaHQgbm93IHlvdSBjYW4gc2F2ZSBmaWZ0eSBwb3VuZHMgcGVyIHBlcnNvbi4gVGhhdHMgdHdvIGh1bmRyZWQgcG91bmRzIG9mZiBmb3IgYSBmYW1pbHkgb2YgZm91ci4=')">Check Answer</button>
45+
</div>
46+
47+
<div id="result3"></div>
48+
49+
<script>
50+
function checkAnswer(inputId, resultId, enAnswer) {
51+
const input = document.getElementById(inputId);
52+
const result = document.getElementById(resultId);
53+
let correctAnswer;
54+
55+
try {
56+
correctAnswer = atob(enAnswer);
57+
} catch (e) {
58+
result.className = 'error';
59+
result.textContent = e;
60+
result.style.display = 'block';
61+
return;
62+
}
63+
64+
if (input.value.trim().toLowerCase() === correctAnswer.toLowerCase()) {
65+
result.className = 'correct';
66+
result.textContent = '✓ Correct Answer!';
67+
} else {
68+
result.className = 'incorrect';
69+
// result.textContent = '✗ Incorrect. Try again!';
70+
result.textContent = correctAnswer;
71+
}
72+
73+
result.style.display = 'block';
74+
}
75+
</script>

src/ciphers/rot13.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# 🔑 ROT13 CIPHER 🔑
2+
The ROT13 cipher is a substitution cipher where each letter is replaced by the letter 13 places down the alphabet. It is a special case of the Caesar cipher with a shift of 13.
3+
4+
## How It Works
5+
- Replace each letter with the letter 13 positions down the alphabet.
6+
- Wrap around to the beginning of the alphabet if necessary.
7+
- Applying ROT13 twice returns the original text.
8+
- USE YOUR CIPHER WHEEL!
9+
10+
## Decrypting ROT13 Ciphers
11+
> [!SUCCESS] Task
12+
> Decrypt the following ciphers. Note that **punctuation matters** when inputting your answers. Upper and lower case does not matter.
13+
>
14+
> The following all use the ROT13 cipher.
15+
16+
### Cipher 1
17+
Qvq lbh xabj... Cvenpl jnf na rkgerzryl pbzcrgvgvir ohfvarff. Cvengrf jbhyq bsgra wbva sbeprf jvgu bar nabgure, sbezvat nyyvnaprf naq syrrgf, va beqre gb vapernfr gurve punaprf bs fhpprff naq znkvzvfr gurve cebsvgf.
18+
19+
<!-- ROT13 -->
20+
<div class="answer-box">
21+
<input class="answer-input" type="text" id="answerinput1" placeholder="Enter your answer">
22+
<button class="answer-button" onclick="checkAnswer('answerinput1', 'result1', 'RGlkIHlvdSBrbm93Li4uIFBpcmFjeSB3YXMgYW4gZXh0cmVtZWx5IGNvbXBldGl0aXZlIGJ1c2luZXNzLiBQaXJhdGVzIHdvdWxkIG9mdGVuIGpvaW4gZm9yY2VzIHdpdGggb25lIGFub3RoZXIsIGZvcm1pbmcgYWxsaWFuY2VzIGFuZCBmbGVldHMsIGluIG9yZGVyIHRvIGluY3JlYXNlIHRoZWlyIGNoYW5jZXMgb2Ygc3VjY2VzcyBhbmQgbWF4aW1pc2UgdGhlaXIgcHJvZml0cy4=')">Check Answer</button>
23+
</div>
24+
25+
<div id="result1"></div>
26+
27+
### Cipher 2
28+
Va gur pnaqyryvg unyyf bs Ubtjnegf, frpergf geniry snfgre guna bjyf, naq rirel juvfcre pneevrf gur jrvtug bs zntvp naq zvfpuvrs.
29+
30+
<!-- ROT13 -->
31+
<div class="answer-box">
32+
<input class="answer-input" type="text" id="answerinput2" placeholder="Enter your answer">
33+
<button class="answer-button" onclick="checkAnswer('answerinput2', 'result2', 'SW4gdGhlIGNhbmRsZWxpdCBoYWxscyBvZiBIb2d3YXJ0cywgc2VjcmV0cyB0cmF2ZWwgZmFzdGVyIHRoYW4gb3dscywgYW5kIGV2ZXJ5IHdoaXNwZXIgY2FycmllcyB0aGUgd2VpZ2h0IG9mIG1hZ2ljIGFuZCBtaXNjaGllZi4=')">Check Answer</button>
34+
</div>
35+
36+
<div id="result2"></div>
37+
38+
<script>
39+
function checkAnswer(inputId, resultId, enAnswer) {
40+
const input = document.getElementById(inputId);
41+
const result = document.getElementById(resultId);
42+
let correctAnswer;
43+
44+
try {
45+
correctAnswer = atob(enAnswer);
46+
} catch (e) {
47+
result.className = 'error';
48+
result.textContent = 'Error decoding the answer. Please contact support.';
49+
result.style.display = 'block';
50+
return;
51+
}
52+
53+
if (input.value.trim().toLowerCase() === correctAnswer.toLowerCase()) {
54+
result.className = 'correct';
55+
result.textContent = '✓ Correct Answer!';
56+
} else {
57+
result.className = 'incorrect';
58+
result.textContent = '✗ Incorrect. Try again!';
59+
}
60+
61+
result.style.display = 'block';
62+
}
63+
</script>

0 commit comments

Comments
 (0)