代码之家  ›  专栏  ›  技术社区  ›  Alec Smart

mysql查询中的sha salt

  •  0
  • Alec Smart  · 技术社区  · 16 年前

    我在做饼干。类似:

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

    现在124是我想要的身份证。因此,在我的mysql表中,我尝试运行一个如下的查询:

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

    如何将“mysalt”添加到SQL查询中?因为我要的是正确的身份证。

    4 回复  |  直到 14 年前
        1
  •  4
  •   VolkerK    16 年前

    使用可以使用 Concat() 为此。

    SELECT ... Sha1( Concat(`id`, 'mysalt') )=...
    
        2
  •  1
  •   Roberto    16 年前

    查询应为:

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

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

        3
  •  1
  •   merkuro    16 年前

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

        4
  •  0
  •   Vexatus    16 年前

    使用康塔特:

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