Menu
Coddy logo textTech

סיכום - לוקר מאובטח

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Rust של Coddy. שיעור 13 מתוך 61.

challenge icon

אתגר

קל

בואו נבנה מערכת כספת מאובטחת שמשלבת את כל מה שלמדת על כימוס! הכספת שלך תגן על התכולה שלה מאחורי קוד סודי: רק מי שיודע את הקוד יוכל לראות מה יש בפנים.

תיצור שני קבצים כדי לארגן את הקוד שלך:

  • locker.rs: הגדר struct בשם Locker עם שני שדות פרטיים: code (u32) ו-contents (String). ה-struct צריך להיות ציבורי, אבל שני השדות חייבים להישאר פרטיים כדי להגן על אבטחת הכספת. ממש את:
    • בנאי new שמקבל קוד התחלתי ותכולה
    • מתודה set_code שמאפשרת לשנות את הקוד של הכספת
    • מתודה get_contents שמקבלת קוד ניסיון; אם הוא תואם לקוד הכספת, החזר את התכולה; אחרת, החזר "Access denied"
  • main.rs: צרף את מודול הכספת שלך, צור כספת והדגם את תכונות האבטחה שלה באמצעות ניסיונות גישה לתכולה עם קודים נכונים ושגויים.

המתודה get_contents צריכה להחזיר String, או את התכולה בפועל כשהקוד נכון, או את הודעת הסירוב כשהוא שגוי. זהו getter מותנה שבודק הרשאות גישה לפני חשיפת נתונים פרטיים.

הפלט שלך צריך להיות בדיוק בפורמט הבא:

Attempt with {code}: {result}
Code changed
Attempt with {code}: {result}

לדוגמה, אם תיצור כספת עם הקוד 1234 והתכולה "Gold coins", לאחר מכן תנסה את הקוד 0000, תשנה את הקוד ל-5678 ותנסה את 5678, הפלט יהיה:

Attempt with 0000: Access denied
Code changed
Attempt with 5678: Gold coins

תקבל חמישה קלטים: הקוד ההתחלתי, התכולה, קוד הניסיון הראשון, הקוד החדש שיש להגדיר וקוד הניסיון השני.

נסו בעצמכם

mod locker;

use locker::Locker;

fn main() {
    // קראו את הקלטים
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let initial_code: u32 = input.trim().parse().expect("Invalid number");

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let contents = input.trim().to_string();

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let first_attempt: u32 = input.trim().parse().expect("Invalid number");

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let new_code: u32 = input.trim().parse().expect("Invalid number");

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let second_attempt: u32 = input.trim().parse().expect("Invalid number");

    // TODO: צרו Locker חדש עם initial_code ו-contents

    // TODO: נסו לקבל את contents באמצעות הקוד first_attempt
    // הדפיסו: "Attempt with {code}: {result}"

    // TODO: שנו את הקוד של הארונית ל-new_code
    // הדפיסו: "Code changed"

    // TODO: נסו לקבל את contents באמצעות הקוד second_attempt
    // הדפיסו: "Attempt with {code}: {result}"
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Rust אונליין