MySQL密码加密验证

时间:2013-03-30 16:06:41

标签: mysql encode

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')

为什么使用SHAMD5无法获得正确的结果?密码都是123456,但是使用不同的加密方法我无法得到正确的结果。

第一个可以正确输出“吉姆”。但是第二个和第三个不能输出“Ryan”或“Jack”,结果集是null。为什么?我想知道如何通过加密密码验证用户。

3 个答案:

答案 0 :(得分:1)

可能是你做错了吗?对我来说很好。

SQL Fiddle link with the queries

我的预感是你正在存储哈希的截断版本。

答案 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