Member 14599863 Ответов: 1

Как войти расшифрованный пароль из базы данных в Python


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

Что я уже пробовал:

#here is what i done for saving encrypt password in database.
from cryptography.fernet import Fernet
import tkinter as tk
from tkinter import messagebox
import pyodbc

Password=ttk.Entry(frame,textvariable=string,text="",show='*')

def std_register(path):
    conn = pyodbc.connect('Driver={SQL Server};''Server=SHUMAILA\SHUM;''Database=FYP;''Trusted_Connection=yes;')
    cursor=conn.cursor()

std_password=Password.get()
encrypt_password=std_password.encode()
key = Fernet.generate_key()
f = Fernet(key)
encrypted_password = f.encrypt(encrypt_password)
cursor.execute('insert into student_registeration_record(std_password)values(?)',encrypted_password
messagebox.showinfo('Registered','Successfully registered')
cursor.commit()

signup=tk.Button(root,text="Browse here",command=std_register)
signup.place()

#here is what i done for logging

from cryptography.fernet import Fernet
import tkinter as tk
from tkinter import messagebox
import pyodbc


Password_txt=ttk.Entry(frame,textvariable=string,text="",show='*')

def login(event=None):
    password=Password_txt.get()
    cursor.execute('select std_password from student_registeration_record where std_password)=?',password
if cursor.fetchone() is not None:
    messagebox.showinfo("Message","Successfully login")
else:
    messagebox.showinfo("Message","Invalid username or password")
cursor.close()
conn.close()
signin=tk.Button(root,text="Browse here",command=login)
signin.place()


оба метода выполняются на разных файлах

1 Ответов

Рейтинг:
2

OriginalGriff

Не шифруйте пароли - это очень небезопасно, примерно наравне с хранением его в обычном тексте.
Это объясняет, почему и как их хранить: Хранение паролей: как это сделать.[^] - код написан на C#, но это довольно очевидно.


Visweswaran N

Хэш-это хэш SHA512 и снова его осуществляется со случайной солью. Так что это трудно для грубой силы и делает Радужный стол бесполезным.

OriginalGriff

Вам не нужно - просто смешайте его с солью. Нет необходимости в дальнейшем шифровании, вот и вся идея ... и вы не используете случайную соль, потому что вам нужно быть в состоянии сделать точно то же самое снова, чтобы проверить ввод пользователя в БД, когда он пытается войти с ней в систему. Случайные соли сделают результирующий хэш отличным от сохраненного значения...
В основном вы используете идентификатор пользователя (а не имя пользователя) в качестве соли, чтобы предотвратить появление одного и того же пароля в виде одного и того же хэш-значения

И как, черт возьми, вы ожидаете, что любая форма шифрования предотвратит грубое принуждение? Это процесс пробования всех возможных входных данных, пока вы не получите совпадение, и предотвращается ограничением попыток в течение установленного периода времени...