Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*-coding: cp1251 -*-
- __author__ = 'Sergey aka j7sx'
- __email__ = "admin@mobipayer.ru"
- __name__ = 'pwdhelper'
- __title__ = 'password helper with sqllite3'
- __version__ = '0.3'
- __python_version__ = '2.7.10'
- __about__ = 'шифрование пароля. шифрование паролей сервисов. Русские буквы в базе не отображаются, но работает, лучше использовать латиницу. pyaes not standart module. install it - pip install pyaes'
- import sqlite3 as db
- import hashlib
- import re
- import pyaes
- # создаём базу и таблицы, если не существует
- conn = db.connect('main.db')
- conn.text_factory = str
- c = conn.cursor()
- c.execute('PRAGMA encoding="UTF-8";')
- c.execute('''CREATE TABLE IF NOT EXISTS user
- (login text, password text) ''')
- c.execute('''CREATE TABLE IF NOT EXISTS service
- (username text, service_name text, service_login text, service_pwd text)''')
- print u"Добро пожаловать в менеджер паролей"
- print u"Разрешены только буквы латинского алфавита и цифры"
- name = raw_input(u'Представьтесь: ').strip()
- c.execute("SELECT COUNT(login) FROM user WHERE user.login=?", (name,))
- user = c.fetchone()
- if user[0] != 1:
- ask_to_create = (raw_input(u"Этого имени нет в базе. Желаете его использовать? Y/N ")).capitalize()
- if ask_to_create == 'Y':
- while 1:
- name_pwd = raw_input(u"Придумайте пароль: ")
- name_pwd2 = raw_input(u"Пароль ещё раз: ")
- if name_pwd == name_pwd2:
- hash_pwd = hashlib.sha224(name_pwd).hexdigest()
- u_create = c.execute("INSERT INTO user(login, password) VALUES (?, ?)", (name, hash_pwd,))
- print u"Ник - ", name, u"и пароль", name_pwd, u"зарегистрированы"
- print u"Для авторизации, запустите ещё раз"
- conn.commit()
- raw_input(u"Нажми Enter")
- break
- else:
- print u"Пароли не совпадают, повторите ввод."
- else:
- raise SystemExit(u'Пока!')
- else:
- key = raw_input(u'Введите секретную фразу не более 32 символов и запомните её: ')
- if len(key) < 32:
- while len(key) < 32:
- key += '{'
- elif len(key) > 32:
- key = key[0:31]
- while 1:
- pwd = hashlib.sha224(raw_input(u"Введите пароль: ")).hexdigest()
- c.execute("SELECT password FROM user WHERE user.login=?", (name,))
- pwd_db = c.fetchone()
- if pwd_db[0] == pwd:
- print u"Приветствую, ", name
- while 1:
- task = (raw_input(u'''
- add - добавить новый сервис.
- all - посмотреть все имеющиеся.
- ls - посмотреть имеющийся.
- exit - выход.
- ''')).lower()
- if not re.match(r'^[a-zA-Z]+$', task):
- raise SystemExit(u'Только команды: add, all, ls, exit!')
- if task == u'add':
- print u"Допускаются латинские буквы и цифры"
- service = raw_input(u"Введите название сервиса: ")
- if not re.match(r'^[a-zA-Z0-9\$\@\!\.\#\\%\^\&\*\(\)\{\}\[\]\-\+]+$', service):
- raise SystemExit(u'Только строчные и прописные латинские буквы, цифры, спецсимволы. ')
- serv_login = raw_input(u"Введите логин: ")
- if not re.match(r'^[a-zA-Z0-9\$\@\!\.\#\\%\^\&\*\(\)\{\}\[\]\-\+]+$', serv_login):
- raise SystemExit(u'Только строчные и прописные латинские буквы, цифры, спецсимволы. ')
- service_password = raw_input(u"Введите пароль: ")
- if not re.match(r"^[a-zA-Z0-9\$\@\!\.\#\\%\^\&\*\(\)\{\}\[\]\-\+]+$", service_password):
- raise SystemExit(u'Только строчные и прописные латинские буквы, цифры, спецсимволы. ')
- aes = pyaes.AESModeOfOperationCTR(key)
- ciphertext = aes.encrypt(service_password)
- c.execute(
- "INSERT INTO service(username, service_name, service_login, service_pwd) VALUES (?, ?, ?, ?)",
- (name, service, serv_login, ciphertext,))
- conn.commit()
- print u"Сервис добавлен."
- elif task == 'ls':
- serv_name = raw_input(u"Введите название сервиса: ")
- c.execute(
- "SELECT service_login,service_pwd FROM service WHERE service.username=? AND service.service_name = ?",
- (name, serv_name,))
- aes = pyaes.AESModeOfOperationCTR(key)
- for i in c.fetchall():
- print u'логин \t- ', i[0]
- try:
- print u'пароль \t- ', aes.decrypt(i[1]).decode('utf-8')
- except UnicodeDecodeError, e:
- print u'Неправильная секретная фраза'
- except TypeError, e:
- print u'Неправильная секретная фраза'
- print
- elif task == u'all':
- c.execute(u"SELECT service_name FROM service WHERE service.username = ?", (name,))
- for i in c.fetchall():
- print i[0]
- c.execute(u"SELECT service_name FROM service WHERE service.username = ?", (name,))
- if c.fetchone() is None:
- print u"Сервисы ещё не были добавлены"
- elif task == u'exit':
- raise SystemExit(u'До встречи!')
- else:
- print u"Пароль не верный, повторите ввод"
- c.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement