Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

สร้าง Caesar Cipher Encoder ของคุณเอง: คำแนะนำทีละขั้นตอน

เคยได้ยิน Caesar cipher มั้ย?

จูลิอัส ซีซาร์ใช้เทคนิคนี้ซ่อนข้อความลับจากศัตรู!

Caesar cipher เป็นเทคนิคเข้ารหัสแบบโบราณที่สุด

แนวคิดหลักคือ หมุนตัวอักษร จำนวน ตำแหน่งบนอักษรอักษร x ตัว

เช่น x = 1 'A' จะกลายเป็น 'B', 'C' กลายเป็น 'D' ตามลำดับ

สร้าง Caesar Cipher Encoder ของคุณเอง: คำแนะนำทีละขั้นตอน

แล้วเรา implement ในโค้ดยังไง?

โชคดี ไมยากอย่างที่คิด เราจะใช้ข้อเท็จจริงว่าตัวอักษรแทนได้ด้วยตัวเลข (ASCII codes) ทำให้การหมุนตัวอักษรกลายเป็นแค่บวกเลข 2 ตัว

สร้าง Caesar Cipher Converter ของคุณเอง

เริ่มต้นแปลง input string เป็น integer array:

ascii = "test".chars.map(&:ord)

แยกความหมาย:

เมธอด chars แยกสตริงเป็น array ของตัวอักษร คืนค่า enumerator จึงเรียก map ได้

map เหมาะสำหรับ transform ทุก element ของ array คืนค่า array ใหม่ที่ transform แล้ว

หมายเหตุ: syntax นี้ต้อง Ruby 1.9+ เทียบเท่ากับ:

 ascii = "test".chars.map { |c| c.ord } 

เราเรียก ord บนทุก element เพื่อได้ค่า ASCII

ตัวอย่าง output:

[116, 101, 115, 116]

ขั้นตอนการหมุน (Rotation)

เพิ่มจำนวนการหมุนที่ต้องการ ใช้ map อีกครั้ง:

 shifted = ascii.map { |c| c + 5 } => [121, 106, 120, 121]

แปลงตัวเลขกลับเป็นตัวอักษร แล้ว join จะได้ encrypted string:

 shifted.map { |c| c.chr }.join => "yjxy"

เพื่อถอดรหัสกลับค่าเดิม ทำขั้นตอนเดียวกัน แต่ shift ซ้ายแทน

สำคัญ: ต้อง shift จำนวนตำแหน่งเท่าเดิม ไม่งั้นจะไม่ได้ข้อมูลเดิมกลับ

โค้ด完成版 และรุ่นทางเลือก

โค้ด Caesar cipher 完成版 ได้ที่นี่

ผลิต 26 รูปแบบที่เป็นไปได้สำหรับ string ใดๆ และจัดการ wrapping (ตัวอย่างในโพสต์ไม่รองรับ)

มีรุ่นทางเลือกใช้ Array#rotate ด้วย

อาจสนใจ: Ruby string formatting