Я написал скрипт на Python, который сравнивает вводимые пользователем данные с запросами к базе данных, а затем разрешает вход в систему или нет.Я разобью свою проблему так, чтобы ее было легче понять:
- В моей базе данных есть пароли, автоматически зашифрованные по соображениям безопасности.
- Сценарий запрашивает базу данных, а затем зашифрованный пароль сохраняется в Python
- Если правильный пароль, который пользователь должен ввести для входа в систему, зашифрован, и пользователь должен ввестив обычном (незашифрованном) пароле, как мне тогда расшифровать пароль внутри 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())