Caesar Cipher ได้รับการตั้งชื่อตาม Julius Caesar (100 ปีก่อนคริสตกาล – 44 ปีก่อนคริสตกาล) ซึ่งใช้เพื่อการสื่อสารลับทางการทหาร Caesar Cipher เป็นรหัสทดแทน เดิมที Julius Caesar ใช้กะสามเพื่อเข้ารหัสและถอดรหัสข้อความ การเข้ารหัสจะดำเนินการโดยใช้ฟังก์ชันเลียนแบบ: f(x)=x+b
ประการแรก อักขระแต่ละตัวในข้อความเริ่มต้น (ข้อความที่จะเข้ารหัส) จะถูกแปลงเป็นตัวเลขตั้งแต่ 0 ถึง 25 ซึ่งสอดคล้องกับตำแหน่งในอักษรละตินซึ่งประกอบด้วยตัวอักษร 26 ตัว --> (a = 0, b = 1 ... z = 25 ).
จากนั้น แต่ละจำนวนที่ได้รับจะถูกแปลงด้วยฟังก์ชันอัฟฟิน (f(x) = 1x + b) "x" เป็นตัวแทนของตัวเลขในขณะที่ "b" ถูกกำหนดไว้ระหว่างการเข้ารหัส "b" คือกุญแจที่ใช้ในการถอดรหัสข้อความสุดท้าย
หากเรานำภาพทั้งหมดมาจัดไว้ในรายการ เราจะได้ตัวเลข n ตัวที่สอดคล้องกับอักขระ n ตัวของข้อความเริ่มต้น ขั้นตอนต่อไปคือการค้นหาค่าโมดูโล 26 ของแต่ละตัวเลข ( โมดูโล่ แปลว่า เศษ )
ตัวอย่าง : โมดูโล่ 4 จาก 19 เป็น 3 เพราะ
19 = 4 * 4 + 3
ในทางกลับกัน โมดูโล 26 จาก 26 เป็น 0 เพราะ26 = 26 * 1 + 0
ดังนั้นเราจึงได้รับรายการใหม่ที่มี n องค์ประกอบ โดยแต่ละองค์ประกอบมีค่าระหว่าง 0 ถึง 25 รวมอยู่ด้วย ตัวเลขทั้งหมดนี้จะถูกแปลงเป็นตัวอักษรละตินโดยใช้ตารางด้านล่าง
ในที่สุดเราก็สร้างข้อความสุดท้ายโดยวางตัวอักษรทั้งหมดไว้เคียงข้างกัน
ขั้นตอนที่ 1 และ 4 สามารถทำได้ด้วยตารางเหล่านี้:
ก | บี | ค | ดี | อี | เอฟ | ช | ชม | ฉัน | เจ | เค | ล | ม | เอ็น | โอ | ป | ถาม | ร | ส | ต | คุณ | วี | ว | เอ็กซ์ | ย | ซี |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
หากผู้โจมตีรู้ว่าข้อความได้รับการเข้ารหัสโดยใช้ Caesar Cipher เขาสามารถลองกะทั้งหมด (ค่า b ตั้งแต่ 1 ถึง 25) เพื่อถอดรหัสข้อความ สิ่งนี้เรียกว่า วิธีบรูตฟอร์ซ
นอกจากนี้เรายังสามารถใช้ การวิเคราะห์ความถี่ เพื่อถอดรหัสข้อความได้ เนื่องจากตัวอักษรแต่ละตัวถูกเข้ารหัสด้วยอัลกอริธึมเดียวกัน และตัวอักษรที่พบบ่อยที่สุดในภาษาอังกฤษคือ:
จากตารางข้างต้น ATTACK สามารถเขียนได้เป็น : 25 0 19 19 0 2 10 25 รูปภาพของแต่ละหมายเลข :
รายการใหม่คือ: 29 4 23 23 4 6 14 29
เมื่อใช้ วิธีโมดูโล 26 เราได้รับ:
ข้อความสุดท้ายคือ 3 4 23 23 4 6 14 3 และเมื่อใช้ตารางอีกครั้ง เราจะแปลงเป็นข้อความที่เข้ารหัส:
เดกซ์เซโกด
ZATTACKZ ถูกเข้ารหัสด้วยฟังก์ชัน x + 4 และกลายเป็น DEXXEGOD
จากตารางข้างต้น DEXXEGOD สามารถเขียนเป็น : 3 4 23 23 4 6 14 3 รูปภาพของแต่ละตัวเลข :
รายการใหม่คือ: -1 0 19 19 0 2 10 -1
เมื่อใช้ วิธีโมดูโล 26 เราได้รับ:
ข้อความสุดท้ายคือ 25 0 19 19 0 2 10 25 และเมื่อใช้ตารางอีกครั้ง เราจะแปลงเป็นข้อความที่เข้ารหัส:
แซตแทคซ์
DEXXEGOD ถูกถอดรหัสด้วยฟังก์ชัน 1x - 4 และกลายเป็น ZATTACKZ
สิ่งนี้เรียกว่าวิธีบรูตฟอร์ซ
จากตารางข้างต้น DEXXEGOD สามารถเขียนได้เป็น : 3 4 23 23 4 6 14 3
a คือตัวเลขระหว่าง 0 ถึง 25 (a = 0 หมายถึงข้อความถูกถอดรหัสแล้ว)
การใช้ฟังก์ชัน f(x) = Mod(1x + a, 26) :
เราจะได้ผลลัพธ์ทั้งหมดนี้:
ก | ข้อความที่ถอดรหัส |
---|---|
1 | fgzzgiqf |
2 | ฮ่าๆๆๆ |
3 | ฮิบบิกช์ |
4 | ijccjlti |
5 | jkddkmuj |
6 | kleelnvk |
7 | lmffmowl |
8 | mnggnpxm |
9 | โนโฮคิน |
10 | โอปิปราโซ |
11 | pqjjqsap |
12 | qrkkrtbq |
13 | rsllsucr |
14 | stmmtvds |
15 | ทันนุเวศน์ |
16 | uvoovxfu |
17 | vwppwygv |
18 | wxqqxzhw |
19 | xyrryaix |
20 | yzsszbjy |
21 | แซตแทคซ์ |
22 | อาบูอับดุลลา |
23 | bcvvcemb |
24 | cdwwdfnc |
25 | เดกซ์เอ็กซ์โกด |
ข้อความเดียวที่สมเหตุสมผลคือ zattackz เพื่อให้เราสามารถอนุมานได้ว่าคีย์คือ 21 (25 - b = 21)
DEXXEGOD ถูกถอดรหัสด้วยฟังก์ชัน f(x) = 1x - 4 หรือ f(x) = 1x + 21 และกลายเป็น ZATTACKZ
ภาษา | เข้ารหัส | ถอดรหัส |
---|---|---|
ค | ซีซาร์.ซี | เร็วๆ นี้ |
ค# | ซีซาร์.ซีเอส | เร็วๆ นี้ |
ซี++ | main.cpp | main.cpp |
จาวาสคริปต์ | encrypt.js | ถอดรหัส.js |
หลาม | encrypt.py | ถอดรหัส.py |
สวิฟท์ | lib.สวิฟท์ | lib.สวิฟท์ |
npm i @cryptoolsorg/caesarcipher