反向哈希查找查询

Eri*_*ker 10 mysql sha

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

eg:
bce700635afccfd8690836f37e4b4e9cf46d9c08
Run Code Online (Sandbox Code Playgroud)

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

  • 是客户活跃的
  • 客户可以通过webservice和服务提交

现在我的问题是:

我有一个问题:

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

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

rua*_*akh 10

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

为什么不添加一个名为(比如说)的新字段id_key_sha1?您可以使用触发器来填充字段,并在其上添加索引.这种方法应该表现更好.

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