Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # -*- Mode: Python; coding: utf-8; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*-
- #
- #PasswordSafe V0.1 alpha
- # ToDo
- # - Abfrage ob Webseite, user und passwort leer oder falsche Angabe
- # - professionellere Lösung für die while schleife
- # - Filtern von ";" in der safe.svd
- # - Encrypten/verbergen von Webseite und Username
- import os
- import random
- import string
- import hashlib
- import getpass
- import base64
- from random import choice # ohne gibt Fehlermeldung zurück obwohl random bereits importiert
- from simplecrypt import encrypt, decrypt
- class pwsafe:
- def gen(length):
- chars = string.ascii_letters + string.digits + '!@#$%^&*()'
- random.seed = (os.urandom(1024))
- createpw = ''.join([choice(chars) for i in range(length)])
- return createpw
- def save(site, user, pw):
- f = open('safe.svd', 'a')
- format = site +";"+ user + ";" + pw + "\n"
- f.write(format)
- f.close()
- def read(): #nicht fertig. Gibt Leerzeilen zwischen Datensätzen an
- f = open('safe.svd', 'r')
- for line in f:
- print(line)
- f.close()
- def sha256(pw):
- sha = hashlib.sha256(pw.encode())
- crypt = sha.hexdigest()
- return crypt
- def encrypt(mpw, pw):
- encryptedpw = encrypt(mpw, pw)
- enctobase = base64.b64encode(encryptedpw)
- enctobasedc = enctobase.decode('utf-8')
- return enctobasedc
- def decrypt(mpw, encpw):
- encpwec = encpw.encode('utf-8')
- encpwdc = base64.b64decode(encpwec)
- decryptedpw = decrypt(mpw, encpwdc)
- decryptedpwdc = decryptedpw.decode('utf-8')
- return decryptedpwdc
- i = 0
- while i < 2:
- if i == 0:
- global masterpw
- inputmpw = getpass.getpass(prompt='Bitte gebe das Masterpasswort ein:')
- masterpw = pwsafe.sha256(inputmpw)
- i += 1
- if i == 1:
- print("Welchen Befehl möchtest du ausführen?")
- print("generate(Passwort generieren), newentry(Neuen Eintrag), newentrypw(Neuer Eintrag inkl. generiertem Passwort),\n read(Datenbank abfragen), decrypt(Passwort entschlüsseln), exit(Programm beenden)")
- command = input("Befehl: ")
- if command == "generate":
- try:
- length = int(input("Passwortlänge: "))
- except ValueError:
- length = 12
- print("Keine oder falsche Eingbe. Der Standardwert wird benutzt. \n")
- print(r"##################################")
- print("Das generierte Passwort lautet:\n" + pwsafe.gen(length))
- print(r"##################################")
- print("Kehre zum Hauptmenü zurück.\n")
- elif command == 'newentry':
- site = input("Webseitenname: ")
- user = input("Username: ")
- plainpw = getpass.getpass(prompt = 'Passwort:', stream = None)
- encpw = pwsafe.encrypt(masterpw, plainpw)
- pwsafe.save(site, user, encpw)
- print("Erfolgreich gespeichert. Kehre zum Hauptmenü zurück\n")
- elif command == "newentrypw":
- site = input("Webseitenname:")
- user = input("Username:")
- try:
- length = int(input("Passwortlänge:"))
- except ValueError:
- length = 12
- print("Falsche oder keine Angabe. Standardwert wird benutzt")
- genpw = pwsafe.gen(length)
- print(r"##################################")
- print("Das Passwort lautet:\n"+genpw)
- print(r"##################################")
- enpw = pwsafe.encrypt(masterpw, genpw)
- pwsafe.save(site, user, enpw)
- print("Erfolgreich gespeichert. Kehre zum Hauptmenü zurück\n")
- elif command == "read":
- print("Webseite ; User ; verschlüsseltes Passwort (ohne Semikolon ';')")
- reading = pwsafe.read()
- print(reading)
- elif command == "decrypt":
- try:
- cryptpw = input("Gebe das zu entschlüsselnde Passwort ein:")
- print(r"##################################")
- print("Das Passwort lautet:")
- print(pwsafe.decrypt(masterpw, cryptpw))
- print(r"##################################")
- except:
- print("Fehler: Bitte überprüfe das Masterpasswort und das zu entschlüsselnde Passwort auf Richtigkeit\n")
- elif command == "exit":
- exit()
- else:
- print("Leider hab ich dich nicht verstanden!. Kehre zum Hauptmenü zurück.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement