Encrypted file-based keyring storage with a small command line interface.
Project description
keyring
Python-Paket für verschlüsselte Keyring-Dateien mit kleiner CLI und installierbarem Konsolenbefehl.
Das Projekt wird auf PyPI als encrypted-keyring veröffentlicht. Der Python-Import bleibt keyring.
Status
Der aktuelle Stand des Repos ist:
- als Python-Paket importierbar
- als CLI über
python3 -m keyringnutzbar - als installierter Befehl
encrypted-keyringverfügbar - über
shell-alias.shzusätzlich alskeyringaliasierbar - mit automatisierten Tests unter
tests/abgesichert - auf PyPI vorbereitet über pyproject.toml
Kurz gesagt: Die Grundlage für eine veröffentlichte, installierbare Python-Bibliothek ist vorhanden, der Code ist als kleines Werkzeug direkt verwendbar, und die wichtigsten Pfade sind dokumentiert und getestet.
Was das Paket macht
Dieses Repository stellt eine einfache, dateibasierte Geheimnisverwaltung bereit:
- Ein
Keyring-Objekt zum Speichern, Lesen, Aktualisieren und Löschen von Einträgen - Eine Kryptoschicht für die Ableitung von Schlüsseln und die Verschlüsselung der gespeicherten Daten
- Eine kleine Kommandozeilenanwendung für direkte Nutzung ohne eigenes Skript
- Eine Paketkonfiguration über
pyproject.toml, damit das Projekt als echtes Python-Paket gebaut und veröffentlicht werden kann
Die Daten werden lokal in einer Datei gespeichert, verschlüsselt abgelegt und mit einem Master-Passwort geöffnet.
Paket- und Importnamen
Wichtig ist die Unterscheidung zwischen Distribution und Import:
- PyPI-Name / Distribution:
encrypted-keyring - Python-Import:
keyring - Installierter CLI-Befehl:
encrypted-keyring - Optionaler Shell-Alias aus diesem Repo:
keyring
Das ist absichtlich so gewählt, weil der Name keyring auf PyPI bereits stark belegt ist.
Voraussetzungen
Das Projekt benötigt:
- Python 3.10 oder neuer
cryptographyzur Schlüsselableitung und Verschlüsselung
Die Laufzeitabhängigkeit ist in pyproject.toml beschrieben. Zusätzlich liegt requirements.txt als einfache manuelle Liste im Repo.
Installation
Aus dem Repository für Entwicklung
Für eine lokale Entwicklungsumgebung:
python3 -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'
Das installiert:
- das Paket im Editable-Modus
- die Laufzeitabhängigkeit
cryptography - die Entwicklungswerkzeuge aus dem
dev-Extra
Als reguläre Installation
Wenn das Paket später von PyPI installiert wird:
pip install encrypted-keyring
Schnellstart
Ein einfaches Beispiel für die Nutzung als Modul:
from pathlib import Path
from keyring import Keyring
ring = Keyring(path=Path("keyring.dat"), password="mein-master-passwort")
ring.put(
"github",
user="alice",
password="geheim",
description="Privates Konto",
)
print(ring.names())
print(ring.get("github"))
Ausgabe und Verhalten hängen natürlich von deinem Inhalt ab, aber der typische Ablauf ist:
- Keyring-Datei öffnen oder anlegen
- Eintrag speichern
- Eintrag wieder lesen
- Einträge bei Bedarf löschen
Nutzung als Modul
keyring exportiert die zentrale Klasse Keyring direkt auf Paket-Ebene:
from keyring import Keyring
API-Übersicht
Keyring(path, password)öffnet oder erstellt eine Keyring-Dateinames()liefert eine Liste aller gespeicherten Eintragsnamenget(name)liest einen Eintrag alsdictoder gibtNonezurückput(name, user=None, password=None, description=None, overwrite=False)speichert einen Eintragdelete(name)entfernt einen Eintrag
Typisches Muster
from pathlib import Path
from keyring import Keyring
ring = Keyring(path=Path("keyring.dat"), password="master")
if "github" not in ring.names():
ring.put(
"github",
user="alice",
password="geheim",
description="Privates Konto",
)
entry = ring.get("github")
if entry is not None:
print(entry["user"])
print(entry["password"])
print(entry["description"])
Verhalten von put
Beim Speichern eines neuen Eintrags:
- wird ein zufälliger interner Schlüssel erzeugt
- werden
user,passwordunddescriptionjeweils separat verschlüsselt - wird der interne Schlüssel selbst mit dem Master-Passwort verschlüsselt und separat abgelegt
Das bedeutet: Der eigentliche Inhalt eines Eintrags ist nicht direkt mit demselben Schlüssel wie die Datei selbst verschlüsselt.
Kleine Anwendung
Die CLI ist für direkte Benutzung gedacht und arbeitet mit derselben Keyring-Datei wie das Modul.
Der Einstieg läuft über:
python3 -m keyring --help
Standardmäßig verwendet die CLI die Datei keyring.dat im aktuellen Arbeitsverzeichnis.
Globale Optionen
-f,--file: Pfad zur Keyring-Datei-p,--password: Master-Passwort für die Datei
Wenn --password fehlt, wird es interaktiv abgefragt.
Befehle
list
Listet alle gespeicherten Einträge auf.
python3 -m keyring -p "mein-master-passwort" list
show
Zeigt einen einzelnen Eintrag an.
python3 -m keyring -p "mein-master-passwort" show github
add
Legt einen Eintrag an oder ersetzt ihn mit --overwrite.
python3 -m keyring -p "mein-master-passwort" add github --user "alice" --entry-password "geheim" --description "Privates Konto"
Wenn der Eintrag bereits existiert und nicht überschrieben werden soll, bricht die CLI mit einer Fehlermeldung ab.
delete
Löscht einen gespeicherten Eintrag.
python3 -m keyring -p "mein-master-passwort" delete github
Beispielablauf
python3 -m keyring -p "master" add demo --user alice --entry-password secret --description test
python3 -m keyring -p "master" list
python3 -m keyring -p "master" show demo
python3 -m keyring -p "master" delete demo
Shell-Alias
Wenn du den installierten CLI-Befehl lieber als keyring aufrufen möchtest, kannst du das beiliegende Alias-Snippet laden:
source ./shell-alias.sh
Die Datei shell-alias.sh enthält:
alias keyring='encrypted-keyring'
Hinweis:
- Das ist ein Shell-Alias, kein Python-Import.
- Der Alias betrifft nur deine aktuelle Shell-Sitzung, solange du ihn nicht dauerhaft in deiner Shell-Startdatei einträgst.
- In einer dauerhaften Konfiguration kannst du denselben Alias zum Beispiel in
~/.bashrcoder~/.zshrchinterlegen.
Tests
Für das Projekt existiert eine pytest-Suite unter tests/:
Die Tests decken ab:
- Verschlüsselung und Entschlüsselung mit
str- undbytes-Passwörtern - Erzeugen zufälliger Eintrags-Schlüssel
- Speichern, Laden, Löschen und Auflisten von Einträgen
- CLI-Verhalten über den
main()-Einstiegspunkt
Zusätzlich sind folgende Szenarien abgedeckt:
- Erzeugen und erneutes Laden einer leeren Keyring-Datei
- Fehlverhalten bei falschem Master-Passwort
get()unddelete()bei nicht vorhandenen Einträgen- Überschreiben und Nicht-Überschreiben bestehender Einträge
- CLI-Fehlerfälle für
show,addohne--overwriteunddelete - CLI-Hilfe über
--help
Tests ausführen
python3 -m pytest -q
Falls dein System-Python extern verwaltet ist, empfiehlt sich ein virtuelles Umfeld:
python3 -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'
python3 -m pytest -q
Packaging und Veröffentlichung
Die Paketdefinition liegt vollständig in pyproject.toml.
Wichtige Punkte daraus:
- Build-Backend:
setuptools - Distribution-Name:
encrypted-keyring - Konsolenbefehl:
encrypted-keyring - Python-Version:
>=3.10 - Laufzeitabhängigkeit:
cryptography - Entwicklungsabhängigkeiten:
build,pytest,twine
Lokales Builden
python3 -m build
Das erzeugt typischerweise:
- ein Source Distribution Archiv
- ein Wheel
Veröffentlichungsprüfung
Vor einem Upload ist ein Trockenlauf sinnvoll:
python3 -m twine check dist/*
Upload auf PyPI
Wenn du veröffentlichen willst:
python3 -m twine upload dist/*
Datenformat und Verhalten
- Die Keyring-Datei wird verschlüsselt gespeichert.
- Beim Schreiben wird eine temporäre Datei verwendet und anschließend atomar ersetzt.
- Nach dem Schreiben wird die Datei mit Berechtigung
600versehen, damit nur der Besitzer lesen und schreiben kann. - Die interne Struktur trennt die eigentlichen Eintragsdaten von den verschlüsselten Eintrags-Schlüsseln.
- Die Kryptoschicht akzeptiert Passwortwerte als
stroder alsbytes. - Zufällige Eintrags-Schlüssel werden intern als Bytes erzeugt und verschlüsselt abgelegt.
- Die Datei
keyring.datist eine Laufzeitdatei und gehört nicht ins Git-Repository.
Projektstruktur
keyring/__init__.py- Paket-Exports fürKeyringundCryptokeyring/__main__.py- CLI-Einstiegspunktkeyring/crypto.py- Schlüsselableitung, Verschlüsselung und Entschlüsselungkeyring/keyring.py- Laden, Speichern und Verwalten der Keyring-Datenpyproject.toml- Build-, Packaging- und Test-Konfigurationrequirements.txt- manuelle Liste der Laufzeitabhängigkeitenshell-alias.sh- Shell-Alias für den CLI-Befehltests/- automatisierte Tests
Veröffentlichung und Nutzung
Ein typischer Ablauf für die Weiterentwicklung ist:
- Code ändern
- Tests ergänzen oder anpassen
python3 -m pytest -qausführenpython3 -m buildausführenpython3 -m twine check dist/*prüfen- Paket auf PyPI hochladen
Hinweise
- Der Python-Import bleibt
keyring, auch wenn die Distributionencrypted-keyringheißt. - Die CLI ist separat installierbar und kann über den Shell-Alias bequem auf
keyringgelegt werden. - Wenn du neue Funktionen ergänzt, sollten dazu passende Tests und eine kurze Dokumentation dazukommen.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file encrypted_keyring-0.1.0.tar.gz.
File metadata
- Download URL: encrypted_keyring-0.1.0.tar.gz
- Upload date:
- Size: 18.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c002a62ce0e84c9bcbe82fdcd8a7c126b84e53476b780552fd2c75bf36488c68
|
|
| MD5 |
59cd7a44d41f0c22a2e2adee654c8cf7
|
|
| BLAKE2b-256 |
c05b072b6d0947aa4e8ea983ac0710fcaf76adf7ab5b076e894be7be10b47d67
|
File details
Details for the file encrypted_keyring-0.1.0-py3-none-any.whl.
File metadata
- Download URL: encrypted_keyring-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
490ce70da13f3bf3e27f278dee2db0116af167e20ccdf368ac96650b1c81a1a6
|
|
| MD5 |
a176b01ccdebe1db253d07bd2b6bbfe9
|
|
| BLAKE2b-256 |
a90f287cbd231c1e770ff9acd8ead19430749cf529d946853b70e6ac0ebe136c
|