Menu
Coddy logo textTech

Zusammenfassung – Sicherer Tresor

Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 48 von 70.

challenge icon

Aufgabe

Einfach

Lassen Sie uns eine Vault-Klasse erstellen, die Closure-basierte Privatsphäre nutzt, um ein wirklich sicheres Speichersystem zu schaffen! Der Tresor wird geheime Inhalte enthalten, auf die nur durch Angabe des richtigen Passworts zugegriffen werden kann.

Sie werden Ihren Code auf zwei Dateien aufteilen:

  • Vault.lua: Erstellen Sie eine Klasse, in der sowohl der Inhalt als auch das Passwort in lokalen Variablen innerhalb des Konstruktors gespeichert werden – völlig verborgen vor externem Zugriff. Der Konstruktor :new(contents, password) sollte diese Werte in lokalen Variablen speichern und dann eine Methode direkt auf der Objektinstanz definieren:
    • :open(attemptedPassword) — prüft, ob das versuchte Passwort mit dem gespeicherten Passwort übereinstimmt. Wenn es korrekt ist, werden die geheimen Inhalte zurückgegeben. Wenn es falsch ist, wird "Access Denied" zurückgegeben.
  • main.lua: Binden Sie Ihr Vault-Modul ein und lesen Sie drei Eingaben: den zu speichernden geheimen Inhalt, das festzulegende Passwort und einen Passwortversuch. Erstellen Sie einen Tresor mit dem Inhalt und dem Passwort, versuchen Sie dann, ihn mit dem versuchten Passwort zu öffnen, und geben Sie das Ergebnis aus. Demonstrieren Sie außerdem, dass die Inhalte wirklich privat sind, indem Sie versuchen, direkt auf vault.contents zuzugreifen und ausgeben, was Sie erhalten.

Sie erhalten drei Eingaben:

  1. Der geheime Inhalt, der im Tresor gespeichert werden soll
  2. Das Passwort zum Schutz des Tresors
  3. Ein Passwortversuch, um den Tresor zu öffnen

Ihre Ausgabe sollte aus zwei Zeilen bestehen:

Result: {resultFromOpen}
Direct access: {whatYouGetFromVaultContents}

Wenn die Eingaben beispielsweise Gold Coins, secret123 und secret123 sind, sollte die Ausgabe wie folgt aussehen:

Result: Gold Coins
Direct access: nil

Wenn die Eingaben Diamond, mypass und wrongpass sind, sollte die Ausgabe wie folgt aussehen:

Result: Access Denied
Direct access: nil

Die entscheidende Erkenntnis hierbei ist, dass sowohl contents als auch password nur als lokale Variablen innerhalb des Konstruktors existieren. Die Methode :open() kann über eine Closure auf sie zugreifen, aber sonst nichts – nicht einmal vault.contents, vault._contents oder vault.password. Das ist echte Kapselung!

Probier es selbst

-- Erfordert das Vault-Modul
local Vault = require('Vault')

-- Eingaben lesen
local contents = io.read()
local password = io.read()
local attemptedPassword = io.read()

-- TODO: Erstelle einen Tresor mit dem Inhalt und dem Passwort

-- TODO: Versuche, den Tresor mit dem versuchten Passwort zu öffnen

-- TODO: Gib das Ergebnis im Format aus: "Result: {resultFromOpen}"

-- TODO: Versuche, direkt auf vault.contents zuzugreifen und gib aus, was du erhältst
-- Ausgabe im Format: "Direct access: {whatYouGetFromVaultContents}"

Alle Lektionen in Object Oriented Programming