Advertisement
j7sx

pwdhelper v.0.3

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