0

我正在设置一个cookie。就像是:

$_COOKIE['test'] = SHA1('124'.'mysalt');

现在 124 是我想要的 id。所以在我的 MySQL 表中,我试图运行如下查询:

$sql = ("SELECT * FROM users WHERE SHA1(`id`) = '".mysql_real_escape_string($_COOKIE['test'])."'");

如何将“mysalt”添加到 SQL 查询中?因为否则我想获得正确的ID。

4

4 回答 4

4

使用可以使用Concat()

SELECT ... Sha1( Concat(`id`, 'mysalt') )=...
于 2009-07-01T08:11:58.657 回答
1

查询应该是:

$sql = ("SELECT * FROM users WHERE SHA1(CONCAT(`id`,`mysalt`)) = '".mysql_real_escape_string($_COOKIE['test'])."'");

如果我正确理解你想要做什么。

于 2009-07-01T08:15:20.447 回答
1

已经提供的解决方案可能会正常工作,但是您确定要这样做吗?如果字段“id”确实是一个独特的标识,您可以使用“LIMIT 1”来阻止 mysql 搜索您的所有项目。另一件事是,您为什么不为此使用单独的预计算字段?我的意思是在每个查询中,mysql 都不必要地计算所有这些 sha1 值。最后一件事。我不确定你为什么使用你的方法,但我最好的猜测是实现某种会话密钥。我认为这是一个坏主意,有几个原因:如果有人掌握了你的盐,他可以访问你的所有帐户。如果有人嗅到一个“会话”,他可以随时重复使用它。选择弱盐可能会产生严重后果。HTH。

于 2009-07-01T08:28:29.937 回答
0

使用 CONCAT:

$sql = ("SELECT * FROM users WHERE SHA1(CONCAT(`id`,'mysalt')) = '".mysql_real_escape_string($_COOKIE[''test''])."'");
于 2009-07-01T08:18:30.470 回答