Чтобы создать имя пользователя и пароль, я использую этот код, который прекрасно работает и сообщения в БД:
Код: Выделить всё
import pyodbc
import os
import hashlib
PEPPER = "SECRET_KEY"
def create_user(username, password):
conn = pyodbc.connect(
r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + db_path + ";"
)
cursor = conn.cursor()
# Generate secure hash
password_hash = create_secure_password(password)
# Split hash into components
salt, key = password_hash[:16], password_hash[16:]
hash_algo = "sha256"
iterations = 100_000
# Insert into database
info = (username, key, salt, hash_algo, iterations)
cursor.execute("INSERT INTO Login_Info ([username], [password_hash], [salt], [hash_algo], [iterations] ) VALUES (?, ?, ?, ?, ?)", info)
conn.commit()
conn.close()
def create_secure_password(password):
salt = os.urandom(16)
iterations = 100_000
hash_value = hashlib.pbkdf2_hmac('sha256',password.encode('utf-8') + PEPPER.encode('utf-8'), salt, iterations)
password_hash = salt + hash_value
return password_hash
Имя пользователя и пароль в базе данных
Однако, когда я использую этот метод для проверки имя пользователя и пароль для базы данных, я получаю эту ошибку:
Код: Выделить всё
TypeError: a bytes-like object is required, not 'str'Код: Выделить всё
password_hash = hashlib.pbkdf2_hmac(hash_algo, password.encode('utf-8'), salt, iterations)Код: Выделить всё
def login(username, password):
#connect to DB
conn = pyodbc.connect(
r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + db_path + ";"
)
cursor = conn.cursor()
# Define your SQL query
select_sql = "SELECT * FROM Login_Info WHERE username = ?"
# Execute the query using the cursor
cursor.execute(select_sql, (username,))
# Fetch one row of result
account = cursor.fetchone()
if not account:
print("Invalid username")
return
salt, db_key, hash_algo, iterations = account[2:6]
# Recompute hash from user entered password
password_hash = hashlib.pbkdf2_hmac(hash_algo, password.encode('utf-8'), salt, iterations)
# Compare hashes
if password_hash == db_key:
print("Login successful")
else:
print("Invalid password")
Подробнее здесь: https://stackoverflow.com/questions/790 ... rds-python