反向哈希查找查询

时间:2011-11-29 02:35:41

标签: mysql sha

我有一个Web服务,我们的客户需要使用的参数之一是自定义密钥。这个键是sha1的哈希

eg:
bce700635afccfd8690836f37e4b4e9cf46d9c08

然后当客户端调用我们的Web服务时,我必须检查一些事情:

  • 是客户活动
  • 是客户可以通过网络服务和服务提交

现在我的问题是:

我有一个问题:

$sql = "SELECT permission, is_active FROM clients WHERE sha1(concat(id,key)) = '" . mysql_real_escape_string($key) . "'";

我做对了吗?还是有更好的方法? 感谢

2 个答案:

答案 0 :(得分:10)

这种方法很昂贵,因为每次运行此查询时,MySQL都必须检查clients中的每条记录,并计算其id和{{1}的SHA-1哈希值}。 (我假设key有多行,或者至少,你想使用支持clients有多行的情况的方法。)

为什么不添加一个名为(例如)clients的新字段?您可以使用trigger来填充字段,并在其上添加index。这种方法应该更好地执行更多

编辑添加:您提到客户端除了传递此SHA-1哈希外,还必须提交用户名和密码?我不知道你的表结构是什么样的,但我猜测首先根据用户名找到客户端记录更有意义,然后比较特定记录的SHA-1哈希,而不是尝试通过SHA-1哈希查找记录。

答案 1 :(得分:0)

你不应该把功能应用到你的LHS列中,在mysql中进行过滤,
这使得mysql无法利用索引进行比较。

示例将允许在索引上使用: -

where key = SHA1(CONCAT(id, :key))

// where the :key = user submitted api key
// and in this case mysql able to fetch the matched rows via index