Mysql 反向哈希查找查询

Mysql 反向哈希查找查询,mysql,sha,Mysql,Sha,我有一个web服务,客户机需要使用的参数之一是自定义密钥。此密钥是sha1的哈希 eg: bce700635afccfd8690836f37e4b4e9cf46d9c08 然后,当客户端调用我们的web服务时,我必须检查以下几项: 客户端是否处于活动状态 is客户端可以通过webservice和服务提交 现在我的问题是: 我有一个问题: $sql = "SELECT permission, is_active FROM clients WHERE sha1(concat(id,key))

我有一个web服务,客户机需要使用的参数之一是自定义密钥。此密钥是sha1的哈希

eg:
bce700635afccfd8690836f37e4b4e9cf46d9c08
然后,当客户端调用我们的web服务时,我必须检查以下几项:

  • 客户端是否处于活动状态
  • is客户端可以通过webservice和服务提交
现在我的问题是:

我有一个问题:

$sql = "SELECT permission, is_active FROM clients WHERE sha1(concat(id,key)) = '" . mysql_real_escape_string($key) . "'";
我做的对吗?还是有更好的办法?
感谢

这种方法成本很高,因为每次运行此查询时,MySQL都必须检查
客户端
中的每条记录,并计算其
id
的SHA-1散列。(我在这里假设
客户端
有多行,或者至少,您希望使用一种支持
客户端
有多行的情况的方法。)

为什么不添加一个名为(say)
id\u key\u sha1
的新字段?可以使用来填充字段,并在其上添加。这种方法应该表现得更好


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

您不应该将函数应用到在mysql中进行过滤的LHS列中,
这使得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

您基本上是使用密钥作为会话ID吗?如果是这样,您可以考虑使用PHP会话。非常容易和安全@JonathanM不,密钥是客户机id+随机密钥(我们本地存储在表中)的sha1,我们给客户机。所以当我们调用我们的站点时,他需要使用它,例如:他发布用户名、密码和其他变量@艾琳·塔克:如果散列中包含一个随机键,那么为什么你的查询只有
sha1(id)
?@ruakh-oops我忘了,谢谢