токен должен быть байтами, список не вызывается?P3.7 - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь проверить ввод пароля пользователя с помощью пароля (зашифрованного) в MySQLdb: Работа с mysqlconnector, python 3.7

encryptor.py: из cryptography.fernet import Fernet

#---key-----



key = b'Ys_G_ziOS1AFs6X-jD3rtgsh77b3HpF7A-yiGpH-5Fg='
cipher_suite = Fernet(key)
cipher_text = cipher_suite.encrypt(b"password")  # Convert in byte
print(cipher_text)




key1 = b'Ys_G_ziOS1AFs6X-jD3rtgsh77b3HpF7A-yiGpH-5Fg='
cipher_suite1 = Fernet(key1)
chiper_text1 = b'gAAAAABcHA2-58GwFxKzMzZRJsNV269_Nc-xvabFJcXV8yf0BuKI2XtD7211Vusf_hMXNrvK0glamHuoJhwPegP9iFRjXpANcg=='



unciphered_text = (cipher_suite1.decrypt(chiper_text1))

print(unciphered_text)

теперь форма простая <form method='POST' action='cgi-bin/file.py'>

с именем пользователя, именем = имя пользователя, паролем, именем = паролем

import mysql.connector
from config import *
from encryptor import *
import cgi, cgitb
import os


#----user/pasw params

form = cgi.FieldStorage()
username1 = form.getvalue('username')
password1 = form.getvalue('password')
print(f"Username: {username1}  Password: {password1}")


#Search password in DB

mycursor = mydb.cursor()
mycursor.execute("USE continental")
sql_password = "SELECT password FROM users WHERE username ='root'"
#assword23 = "SELECT password FROM users WHERE user = %s", (username1,)
mycursor.execute(sql_password)



find_password = mycursor.fetchall()    # ????


 unciphered_text1 = (cipher_suite1.decrypt(find_password))#error


if password1==unciphered_text1:
    print("ok")
else:
    print(unciphered_text1)

   unciphered_text1 = (cipher_suite1.decrypt(find_password))
  File "/Users/jhon/prova/lib/python3.7/site-packages/cryptography/fernet.py", line 74, in decrypt
    timestamp, data = Fernet._get_unverified_token_data(token)
  File "/Users/jhon/prova/lib/python3.7/site-packages/cryptography/fernet.py", line 86, in _get_unverified_token_data
    raise TypeError("token must be bytes.")
TypeError: token must be bytes.

 token must be bytes.

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

...