用Python登录Auth,Phpmyadmin,“SELECT”出现问题

2024-04-27 03:06:12 发布

您现在位置:Python中文网/ 问答频道 /正文

I've a problem in this SELECT:

前提:

我编写了一个脚本,创建了一个数据库,其中的“Key”是密码加密的->;encrypt代码:

import base64
import os
from cryptography.hazmat.backends import  default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

password_provided = "password"  # input
password = password_provided.encode()   # Convert in type byte

salt = b'\xaes\xff\x80\xe2| (\xfcG\xbdk\xedxb9\x15n7'
kdf = PBKDF2HMAC(
    algorithm=hashes.SHA256(),
    length=32,
    salt=salt,
    iterations=100000,
    backend=default_backend()
)
key = base64.urlsafe_b64encode(kdf.derive(password)) #can only use kdf once
print(key)

现在我正在尝试使用方法POST进行身份验证,我开始尝试使用一些SELECT for‘search’日志的密码,并找到一个方法来比较未加密的字符串和登录时尝试的加密字符串:

mycursor = mydb.cursor()

sql = "SELECT password FROM users WHERE password = %s", (key) #Problem!

mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
  print(x)

我的输出是:

**  File "login.py", line 12, in <module>
    mycursor.execute(sql)
  File "/Users/jhon/prova/lib/python3.7/site-packages/mysql/connector/cursor.py", line 536, in execute
    stmt = operation.encode(self._connection.python_charset)
AttributeError: 'tuple' object has no attribute 'encode'
**

我试着做“key1=键。编码()“,但这是错误的。。。 谢谢大家。你知道吗


Tags: keyinfromimportbackendexecutesqlpassword
1条回答
网友
1楼 · 发布于 2024-04-27 03:06:12

此行创建一个字符串和一个int的二元组,并将其赋给变量“sql”:

sql = "SELECT password FROM users WHERE password = %s", (key) #Problem!

“(key)”不生成1元组;要这样做,请使用“(key,)”。看起来您想创建一个字符串的2元组,后跟一个1元组。你知道吗

然后此行将作为单个参数创建的2元组发送到被调用的方法:

mycursor.execute(sql)

如果这是您正在使用的库,那么函数定义的docstring将在这里执行(参见第183行)…:https://github.com/mysql/mysql-connector-python/blob/master/lib/mysql/connector/cursor.py

。。。显示要使用n元组作为.execute(…)的第二个函数参数来指定查询模式填充值。你可以用可变参数操作符,也可以是序列解包操作符(在https://medium.com/understand-the-python/understanding-the-asterisk-of-python-8b9daaa4a558中提到),或者你可以把它们分开。所以您可能需要这样的代码:

sql = "SELECT password FROM users WHERE password = %s"

values = (key,)

mycursor.execute(sql, values)

或者

sql = "SELECT password FROM users WHERE password = %s", (key,)

# star operator inside function call unpacks sequence variable by one level into separate arguments.

mycursor.execute(*sql)

相关问题 更多 >