Как сохранить пароли в моей базе данных в зашифрованном виде, а затем немедленно расшифровать их в Python? - PullRequest
0 голосов
/ 30 сентября 2018

Я написал скрипт на Python, который сравнивает вводимые пользователем данные с запросами к базе данных, а затем разрешает вход в систему или нет.Я разобью свою проблему так, чтобы ее было легче понять:

  1. В моей базе данных есть пароли, автоматически зашифрованные по соображениям безопасности.
  2. Сценарий запрашивает базу данных, а затем зашифрованный пароль сохраняется в Python
  3. Если правильный пароль, который пользователь должен ввести для входа в систему, зашифрован, и пользователь должен ввестив обычном (незашифрованном) пароле, как мне тогда расшифровать пароль внутри Python?

Пояснения:

Моя программа шифрует и дешифрует пароль и уникальный идентификатор пользователя уже для двойной безопасности.

Я хочу всебыть максимально безопасным.Я начал объектно-ориентированный Python не так давно, поэтому, пожалуйста, не стесняйтесь быть настолько резким, насколько это возможно.

Я делаю это непрофессионально, но это достигнет производства!

Информация

  • Я использую MySQL для базы данных, Python 3.7 для сценариев и Flask для сессий.

            # Imports 
            from passlib.context import CryptContext 
            import mysql.connector 
            import json 
            from pprint import pprint
            # Config file loaded as a json 
            with open("database_connect.json") as config:
                config = json.load(config)
                config = config[0]
                try: 
            # Json is argued as a kwarg
                    cnx = mysql.connector.connect(**config)
                    cursor = cnx.cursor()
            # Query is made 
                    cursor.execute("SELECT first,id,pwd,uid FROM user")
                    args = cursor.fetchone() 
            # Any integer queries have the string function mapped to them
                    args = tuple(map(lambda i: str(i), args))
                except:
                    print("Connection error!")
                finally:
                    cnx.close()
            # Passlib encryption method 
            passlib_context = CryptContext(
                    schemes=["pbkdf2_sha256"],
                    default="pbkdf2_sha256",
                    pbkdf2_sha256__default_rounds=300000)
            # Base class for all users 
            class default:
                priviliges = {
                "Ban": False, 
                "Kick": False, 
                "Broadcast": False, 
                "Iplookup": False }
            # Instantiating the default class 
                def __init__(self, name, uniqueid, pwd, usernameid):
                    self.name = name 
                    self.__pwd = passlib_context.hash(pwd)
                    self.__uniqueid = passlib_context.hash(uniqueid)
                    self.usernameid = usernameid
            # Encryption method for users 
                def encrypt_method(self):
                    encrypt_data = [self.__pwd, self.__uniqueid]
                    return encrypt_data 
            class decrypt(): 
            # Instantiating the decryption class 
                def __init__(self, attempted_pwd, hashpwd): 
                    self.__attempted_pwd = attempted_pwd
                    self.__hashpwd = hashpwd 
            # Decryption method for decryption class 
                def decrypt_method(self):
                    decrypt_data = passlib_context.verify(self.__attempted_pwd, self.__hashpwd) 
                    if decrypt_data is False:
                        allow_login = False
                    elif decrypt_data is True:
                        allow_login = True
                    return allow_login 
            # Information fetched from the database in tuple form, used as an arguement 
            user = default(*args)
            # Attempt corresponds to user input. The first arguement is the attempted password.
            attempt = decrypt("",user.encrypt_method()[0])
            print(attempt.decrypt_method())
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...