使用if条件使用python比较密码

Posted

技术标签:

【中文标题】使用if条件使用python比较密码【英文标题】:use if condition to compare the password using python 【发布时间】:2015-08-22 21:43:59 【问题描述】:

我有用于获取名称和密码的 html 表单。python 代码用于获取输入数据并存储在变量 first_name 和密码中。

对于给定的名称,使用 WHERE 子句从数据库中获取存储的密码。 通过使用 if 条件,我尝试比较从数据库中获取的密码和从表单输入的密码。如果它们相等,则执行一些操作。如果不执行其他条件。但问题是我无法理解如何分配如果条件。 我尝试的是如下所示。:

#!"C:\python34\python.exe"
import cgitb ,cgi
import sys
import mysql.connector
cgitb.enable()
form = cgi.FieldStorage() 
print("Content-Type: text/html;charset=utf-8")
print()

# Get data from fields
first_name = form.getvalue('first_name')
password = form.getvalue('pass')
print (password)
conn = mysql.connector.connect(host='localhost',port='8051',
                                       database='test',
                                       user='root',
                                       password='next')                                
cursor = conn.cursor()                                 
if conn.is_connected():
    print('Connected to MySQL database')
cursor.execute("""SELECT pass FROM tablename1 where  name = '%s'""" % (first_name))

for row in cursor():
    if(password == row):
        print("sucess")
    else:
        print("fail")

请检查我的代码。并提出一些建议。

【问题讨论】:

不应该这样做。密码不应该以纯文本形式存储和比较,你应该使用加盐和散列。如果您不知道自己在做什么,我强烈建议您使用现有的库,而不是尝试使用自己的库。 @jonrsharpe 类似于注册表单,您可以在其中输入密码存储在数据库中的详细信息和密码。稍后如果您登录,它将从数据库中获取密码并检查当前密码是否正确与否。这就是我想要做的。但我没有得到你的建议。 能否请任何人检查使用 if 和 for 的语法是否正确。因为它没有打印成功也失败了 是的,我知道你想做什么,我告诉你你做错了。答案向您展示了如何做得更好。至于为什么password != row,为什么不试试print(repr(password))print(repr(row))找出原因呢? 【参考方案1】:

当用户第一次注册时,你应该这样保存他的密码:

$password = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

这应该输出类似$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

你应该将它存储在你的数据库中。

那么你应该像这样验证密码:

<?php
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq'; // you get it from your database

if (password_verify('rasmuslerdorf', $hash))  // 'rasmuslerdorf' is what user entered
    echo 'Password is valid!';
 else 
    echo 'Invalid password.';

?>

现在,什么是哈希?请阅读this。

编辑:你的意思是这样的?

 cursor.execute("SELECT * FROM users WHERE username= ? and password= ?",
    (username, pass1))
found = cursor.fetchone()
if found:
    # user exists and password matches
else:
    # user does not exist or password does not match

【讨论】:

如果我想在数据库中存储密码或名称然后获取并比较。我问的是比较不验证。 我已经编辑了答案。这是你想做的吗?

以上是关于使用if条件使用python比较密码的主要内容,如果未能解决你的问题,请参考以下文章

python的if和while如何放多个条件判断?

python的if和while如何放多个条件判断?

产品经理学Python:条件控制

Python新手学习基础之条件语句——if/else语句

python if条件判断及while语句实例

如何将python中的两个列表与if loc条件进行比较