Skip to content

Lugmaner/Password-Manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Password Manager (C)

Ein einfacher Password Manager in C. Das Projekt ist als Übungsprojekt entstanden, um mehr praktische Erfahrung mit C, dynamischen Datenstrukturen und manueller Speicherverwaltung zu sammeln.

Der Fokus liegt nicht darauf, einen produktionsreifen Password Manager zu bauen. Wichtiger sind hier saubere interne Strukturen, klare Ownership-Regeln und ein bewusster Umgang mit Speicher.


Überblick

Der Password Manager verwaltet Einträge mit Zugangsdaten und stellt dafür eine einfache terminalbasierte Oberfläche bereit.

Aktuell umfasst das Projekt:

  • Erstellung und Verwaltung von Passwort-Einträgen
  • dynamische Speicherung mehrerer Einträge
  • einfache Suche
  • formatierte Ausgabe im Terminal
  • grundlegende Menüführung
  • Passwort-Ablaufwarnungen
  • bewusstes Freigeben von Speicher

Zusammenarbeit

Das Projekt habe ich gemeinsam mit einem Kollegen angefangen. Die Aufteilung war grob so, dass ich mich vor allem um die internen Datenstrukturen gekümmert habe, während mein Kollege stärker am User Interface und der Bedienung gearbeitet hat.

Mein Schwerpunkt lag auf:

  • entry.c / entry.h
  • database.c / database.h
  • Speicherverwaltung
  • Ownership der Daten
  • dynamische Verwaltung der Einträge

Der UI-Teil wurde gemeinsam abgestimmt, die konkrete Umsetzung der Bedienoberfläche lag aber hauptsächlich bei meinem Kollegen.


Aktueller Stand

Entry (entry.c / entry.h)

Das Entry-Modul ist für einzelne Passwort-Einträge zuständig.

Ein Entry verwaltet seine eigenen Daten und übernimmt die Verantwortung für den Speicher der enthaltenen Strings. Extern übergebene Werte werden intern kopiert, damit keine unklare Ownership entsteht.

Enthaltene Funktionen und Eigenschaften:

  • Erstellen und Freigeben von Passwort-Einträgen
  • interne Kopie aller relevanten Felder
  • klare Ownership: jeder Eintrag verwaltet seinen eigenen Speicher
  • explizites Überschreiben von Passwörtern vor dem Freigeben
  • Zeitstempel für letzte Änderungen
  • Zeitstempel für Passwortänderungen

Database (database.c / database.h)

Das Database-Modul verwaltet mehrere Entries über ein dynamisches Array von Entry-Pointern.

Die Kapazität wird bei Bedarf vergrößert, ohne bei jedem neuen Eintrag neu zu allokieren. Dadurch bleibt die Struktur einfach, aber trotzdem effizient genug für das Projekt.

Implementierte Funktionen:

  • database_create
  • database_free
  • db_add_entry
  • get_entry
  • db_remove_entry

Wichtige Punkte:

  • dynamisches Array von Entry-Pointern
  • Kapazität wird bei Bedarf verdoppelt
  • keine unnötige Reallocation bei jeder Einfügung
  • Bounds Checking bei Zugriffen
  • Freigabe aller enthaltenen Entries beim Löschen der Datenbank
  • Vermeidung von Undefined Behavior im normalen Gebrauch

User Interface (user_interface.c / user_interface.h)

Das User-Interface stellt eine einfache Bedienung über das Terminal bereit.

Es ist bewusst schlicht gehalten und dient vor allem dazu, die Datenstrukturen praktisch nutzen zu können.

Aktuell enthalten:

  • terminalbasierte Oberfläche
  • einfaches Login-System
  • interaktive Menüführung
  • formatierte Ausgabe gespeicherter Einträge
  • Suche nach Einträgen
  • case-insensitive Suchfunktion
  • Warnungen bei ablaufenden oder alten Passwörtern

Design-Fokus

Bei diesem Projekt ging es hauptsächlich darum, C sauberer und bewusster zu verwenden.

Wichtige Themen waren:

  • manuelle Speicherverwaltung
  • Heap-Allokation und korrektes Freigeben
  • klare Ownership von Daten
  • dynamische Datenstrukturen
  • Trennung von Verantwortlichkeiten zwischen Entry, Database und Interface
  • Vermeidung von Undefined Behavior
  • erster Umgang mit sensiblen Daten im Speicher

Besonders interessant war für mich hier, wie schnell in C kleine Fehler bei Ownership oder Freigabe zu größeren Problemen führen können. Deshalb war ein Ziel, die einzelnen Module so zu strukturieren, dass klar ist, wer welchen Speicher besitzt und wann dieser freigegeben wird.


Einschränkungen / Work in Progress

Das Projekt ist aktuell nicht sicher genug für echten Einsatz. Einige wichtige Dinge fehlen bewusst noch oder sind nur sehr einfach umgesetzt:

  • keine Verschlüsselung
  • keine sichere Schlüsselverwaltung
  • Daten werden nicht dauerhaft gespeichert
  • noch keine Save/Load-Funktionalität
  • eingeschränkte Eingabevalidierung
  • keine automatisierten Tests
  • Sicherheitsaspekte sind nicht produktionsreif

Disclaimer

Dieses Projekt ist nur zu Lernzwecken gedacht. Es ist nicht für die echte Verwaltung von Passwörtern geeignet, insbesondere weil Verschlüsselung, sichere Speicherung und Key Management fehlen.


Build

Beispielhafter Build-Befehl:

gcc -Wall -Wextra entry.c database.c user_interface.c main.c -o password_manager

Danach kann das Programm gestartet werden mit:

./password_manager

Warum dieses Projekt?

Das Projekt war für mich eine gute Möglichkeit, C nicht nur theoretisch zu verwenden, sondern typische Probleme direkt praktisch zu sehen: Speicher reservieren, Speicher freigeben, Datenstrukturen wachsen lassen, Pointer korrekt behandeln und Zuständigkeiten zwischen Modulen klar halten.

Gerade weil C einem wenig abnimmt, eignet sich so ein Projekt gut, um ein besseres Gefühl für Speicher, Ownership und saubere Schnittstellen zu bekommen.

About

Terminalbasierter Password Manager in C mit Fokus auf Speicherverwaltung, dynamische Datenstrukturen und Ownership

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages