MySql SHA1()允许错误的密码短语

时间:2014-02-07 20:58:43

标签: mysql sha1

我正在尝试使用SHA1()来加密使用MySql作为远程数据库的Android应用程序的密码。

为了测试实现,我只是将用户电子邮件地址添加到密码并通过SHA1()运行。代码片段来自数据库中的sql:

INSERT INTO person (
email_address,
user_password
) VALUES (
str_email,
SHA1(str_password+str_email)
);

登录功能是:

SELECT id FROM person WHERE
email_address = userEmail AND
user_password = SHA1(userPassword+userEmail);

如果我添加一个名为'me@email.com'和'abc'作为密码的人,然后使用'me@email.com'和'differentPassword'调用登录函数,则该过程仍会返回正确的id从人员表中,我预计没有结果。

SHA1('正确的电子邮件'+'错误的密码')如何与SHA1匹配('正确的电子邮件'+'正确的密码')?

我使用的主机是慈善机构的云主机。 BCrypt不可用,所以我只能使用内置的MySql函数。

2 个答案:

答案 0 :(得分:3)

MySQL不支持+标记进行连接。请改用||CONCAT()

另外,请考虑使用更安全的哈希函数。

答案 1 :(得分:0)

您选择的所有记录都应该直接选择。通常情况下,模式如下:

SELECT id FROM person WHERE email_address=? AND password_crypted=?

这是password_crypted正在使用的地方,至少,一个特定于密码的散列函数,如bcrypt