insert into test(username,pwd) values('Jim',ENCODE('123456','Jim'));
select username from test where username='Jim' and pwd=ENCODE('123456','Jim')
insert into test(username,pwd) values('Ryan',SHA('123456'))
select username from test where username='Ryan' and pwd=SHA('123456')
insert into test(username,pwd) values('Jack',MD5('123456'))
select username from test where username='Jack' and pwd=MD5('123456')
为什么使用SHA
和MD5
无法获得正确的结果?密码都是123456,但是使用不同的加密方法我无法得到正确的结果。
第一个可以正确输出“吉姆”。但是第二个和第三个不能输出“Ryan”或“Jack”,结果集是null
。为什么?我想知道如何通过加密密码验证用户。
答案 0 :(得分:1)
答案 1 :(得分:1)
您需要更改字段类型,因为20个字符的VARCHAR
字段会截断哈希值:
MD5
生成一个32个字符的字符串,因此请使用CHAR(32)
。
SHA
生成一个64个字符的字符串,因此请使用CHAR(64)
。
出于性能原因(SQL知道要分配多少),当您知道输入的长度时,应始终使用CHAR
而不是VARCHAR
。
答案 2 :(得分:0)
注意 已知对MD5和SHA-1算法的利用。您可能希望考虑使用本节中描述的其他加密函数之一,例如SHA2()。
http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html