n/notizen/n.py
2023-11-21 23:18:10 +01:00

143 lines
4.4 KiB
Python

#!/usr/bin/python3
import hashlib,os
## funktionen
def a_str(inp, leng):
if len(inp) < leng:
while len(inp) < leng:
inp += inp
inp = inp[:leng]
elif len(inp) > leng:
inp = inp[:leng]
return inp
def sha512(passwort):
sha512 = hashlib.sha512()
sha512.update(passwort.encode())
return sha512.hexdigest()
def crypt(text, key_hash):
key_hash = a_str(key_hash,len(text))
crypted_text = ""
for i in range(len(text)):
crypted_text += chr(ord(text[i]) ^ ord(key_hash[i]))
return crypted_text
def o(note,mode):
return open(f"{n_path}{note}.txt",mode,encoding="utf-8")
def nlist():
string = ""
notizen = []
if os.listdir(n_path) == []:
string += "Noch keine Notizen\n"
else:
string += "Deine Notizen:\n"
for a in os.listdir(n_path):
notizen.append(f"{a}"[:-4])
for n in notizen:
string += f" - {n}:\n"
datei = o(n,"r")
string += crypt(datei.read() ,passwort)+"\n"
datei.close()
return [string,notizen]
def neditadd(notiz=str,text=str):
if not notiz+".txt" in os.listdir(n_path):
if a_note+".txt" in os.listdir(n_path):
back = "Notiz gibt es schon."
return back
back = "neue Notiz angelegt."
else:
back = "Erfolgreich gespeichert"
datei = o(notiz,"w")
datei.write(crypt(text, passwort))
datei.close()
return back
## variablen
passwort = input("Passwort:")
passwort = sha512(passwort)
##notizen pfad
n_path = os.path.dirname(os.path.abspath(__file__))
tzeichen = os.sep
n_path += tzeichen
if not os.path.exists(f"{n_path}n{tzeichen}"):
os.makedirs(f"{n_path}n{tzeichen}")
print("Notizenverzeichniss angelegt.")
n_path += "n"+tzeichen
## start
print(""" Willkommen zu n
ACHTUNG: Falls du dein Passwort falsch eingibst überprüfe
erst ob deine Notizen richtig angezeigt werden sonnst falls
du eine neue Notiz erstellst wird sie anderst verschlüsselt.
ACHTUNG: Es kann seine das einige Zeichen wie Umlaute falsch
angezeigt werden können.
Was möchtest du machen?: add, edit, read, list, help, exit.
""")
print(nlist()[0])
## programmschleife
while 1:
action = input(">")
if action == "help": #help
print("""Hilfe:
edit = Bearbeite eine Notiz.
read = Zeige eine Notiz an.
add = Erstelle eine Notiz.
delete = Notiz löschen.
list = Zeigt dir deine Notizen nochmals an.
secure = Wie funktioniert die verschlüsselung.
debug = Zeigt Debug Infos.
exit = Beenden.
Bei Fehlern Bitte an Megamichi melden.""")
if action == "secure": #secure
print("""Zur Sicherheit:
Es wir ein SHA-512 Hash aus dein Passwort erstellt.
Und mit deinen Notizen und den auf die richtige Länge
angepassten Hash wir ein One-Time-Pad angewendet.
ACHTUNG: Falls du dein Passwort falsch eingibst überprüfe
erst ob deine Notizen richtig angezeigt werden sonst falls
du eine neue Notiz erstellst wird sie anderst verschlüsselt.
ACHTUNG: Es kann seine Das einige Zeichen wie Umlaute falsch
angezeigt werden können.""")
if action == "edit": #edit
a_note = input("Notiz Titel:")
text = input("bitte neuen Text einfügen:")
print(neditadd(a_note,text))
if action == "read": #read
a_note = input("Notiz Titel:")
if a_note+".txt" in os.listdir(n_path):
datei = o(a_note,"r")
print(crypt(datei.read() ,passwort))
datei.close()
else:
print("Notiz gibts nicht.")
if action == "add": #add
a_note = input("Notiz Titel:")
text = input("bitte neuen Text einfügen:")
print(neditadd(a_note,text))
if action == "delete": #delete
a_note = input("Notiz Titel:")
if a_note+".txt" in os.listdir(n_path):
if input("Wirklich löschen?:") == "ja":
os.remove(f"{n_path}{a_note}.txt")
print("Notiz gelöscht")
else:
print("Notiz nicht gelöscht")
else:
print("Notiz gibt es nicht.")
if action == "list": #list
print(nlist()[0])
if action == "debug": #debug
print(f"""Debug Informationen:
n_path={n_path}
pas_hash={passwort}""")
if action == "exit": #exit
print("Bye")
exit()