我正在尝试使用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函数。
答案 0 :(得分:3)
MySQL不支持+
标记进行连接。请改用||
或CONCAT()
。
另外,请考虑使用更安全的哈希函数。
答案 1 :(得分:0)
您选择的所有记录都应该直接选择。通常情况下,模式如下:
SELECT id FROM person WHERE email_address=? AND password_crypted=?
这是password_crypted
正在使用的地方,至少,一个特定于密码的散列函数,如bcrypt。