Advertisement
j7sx

pwdhelper v.0.25

Jul 25th, 2015
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.69 KB | None | 0 0
  1. #exist errors
  2. #-*-coding: cp1251 -*-
  3. __author__ = 'Sergey aka j7sx'
  4. __email__ = "admin@mobipayer.ru"
  5. __name__= 'pwdhelper'
  6. __title__ = 'password helper with sqllite3'
  7. __version__ = '0.25'
  8. __python_version__ = '2.7.10'
  9.  
  10. import sqlite3 as db
  11. import hashlib
  12. import base64
  13. import re
  14. import pyaes
  15.  
  16. #создаём базу и таблицы, если не существует
  17. conn = db.connect('main.db')
  18. c = conn.cursor()
  19. c.execute('''CREATE TABLE IF NOT EXISTS user
  20. (login text, password text)''')
  21.  
  22. c.execute('''CREATE TABLE IF NOT EXISTS service
  23. (username text, service_name text, service_login text, service_pwd text)''')
  24.  
  25. print "Добро пожаловать в менеджер паролей"
  26. print "Разрешены только буквы латинского алфавита и цифры"
  27. name = raw_input("Представьтесь: ").strip()
  28. if not re.match(r'^[a-zA-Z0-9]+$', name):
  29.     raise SystemExit("Разрешены только буквы латинского алфавита и цифры")
  30. c.execute("SELECT COUNT(login) FROM user WHERE user.login=?", (name,))
  31. user = c.fetchone()
  32.  
  33. if user[0] != 1:
  34.     ask_to_create =  (raw_input("Этого имени нет в базе. Желаете его использовать? Y/N ")).capitalize()
  35.     if ask_to_create == 'Y':
  36.         while 1:
  37.             name_pwd = raw_input("Придумайте пароль: ")
  38.             name_pwd2 = raw_input("Пароль ещё раз: ")
  39.             if name_pwd == name_pwd2:
  40.                 hash_pwd = hashlib.sha224(name_pwd).hexdigest()
  41.                 u_create = c.execute("INSERT INTO user(login, password) VALUES (?, ?)", (name, hash_pwd,))
  42.                 print "Ник - ", name, "и пароль", name_pwd, "зарегистрированы"
  43.                 print "Для авторизации, запустите ещё раз"
  44.                 conn.commit()
  45.                 raw_input("Нажми Enter")
  46.                 break
  47.             else:
  48.                 print "Пароли не совпадают, повторите ввод."
  49.     else:
  50.         raise SystemExit('Пока!')
  51.  
  52. else:
  53.     key = raw_input('Введите секретную фразу не более 32 символов и запомните её: ')
  54.     if not re.match(r'^[a-zA-Z0-9]+$', service):
  55.         raise SystemExit('Только цифры и буквы латинского алфавита!')
  56.     while len(key) < 32:
  57.         key += '{'
  58.         if len(key) == 32:
  59.             break
  60.     while 1:
  61.         pwd = hashlib.sha224(raw_input("Введите пароль: ")).hexdigest()
  62.         c.execute("SELECT password FROM user WHERE user.login=?", (name, ))
  63.         pwd_db = c.fetchone()
  64.         if  pwd_db[0] == pwd:
  65.             print "Приветствую, ", name
  66.             while 1:
  67.                 task = (raw_input('''
  68.                        add - добавить новый сервис.
  69.                        all - посмотреть все имеющиеся.
  70.                        ls  - посмотреть имеющийся.
  71.                        exit - выход.
  72.                ''')).lower()
  73.                 if task == 'add':
  74.                     print "Допускаются латинские буквы и цифры"
  75.                     service = raw_input("Введите название сервиса: ")
  76.                     if not re.match(r'^[a-zA-Z0-9]+$', service):
  77.                         raise SystemExit('Только цифры и буквы латинского алфавита!')
  78.                     serv_login = raw_input("Введите логин: ")
  79.                     if not re.match(r'^[a-zA-Z0-9]+$', serv_login):
  80.                         raise SystemExit('Только цифры и буквы латинского алфавита!')
  81.                     service_password = raw_input("Введите пароль:  ")
  82.                     print key
  83.                     aes = pyaes.AESModeOfOperationCTR(key)
  84.                     ciphertext = aes.encrypt(service_password)
  85.                     print ciphertext
  86.                     if not re.match(r'^[a-zA-Z0-9]+$', service_password):
  87.                         raise SystemExit('Только цифры и буквы латинского алфавита!')
  88.                     c.execute("INSERT INTO service(username, service_name, service_login, service_pwd) VALUES (?, ?, ?, ?)", (name, service, serv_login, ciphertext,))
  89.                     conn.commit()
  90.                     print "Сервис добавлен."
  91.                 elif task == 'ls':
  92.                     serv_name = raw_input("Введите название сервиса: ")
  93.                     c.execute("SELECT service_login,service_pwd FROM service WHERE service.username=? AND service.service_name = ?", (name, serv_name,))
  94.                     aes = pyaes.AESModeOfOperationCTR(key)
  95.                     for i in c.fetchall():
  96.                         print 'логин \t- ', i[0]
  97.                         print 'пароль \t- ', aes.decrypt(i[1]).decode('utf-8')
  98.                 elif task == 'all':
  99.                     c.execute("SELECT service_name FROM service WHERE service.username = ?", (name,))
  100.                     for i in c.fetchall():
  101.                             print i[0]
  102.                     c.execute("SELECT service_name FROM service WHERE service.username = ?", (name,))
  103.                     if c.fetchone() is None:
  104.                         print "Сервисы ещё не были добавлены"
  105.                 elif  task == 'exit':
  106.                     raise SystemExit('До встречи!')
  107.         else:
  108.             print "Пароль не верный, повторите ввод"
  109.  
  110. c.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement