WHERE中的SQL SHA1

Isa*_*ler 2 mysql sql sha1 where where-clause

在我的程序中,我们将用户的IP地址存储在记录中.当我们向用户显示记录列表时,我们不想泄露其他用户的IP,因此我们将SHA1哈希.然后,当用户点击记录时,它会转到这样的URL:

http://www.example.com/allrecordsbyipaddress.php?ipaddress=SHA1HASHOFTHEIPADDRESS
Run Code Online (Sandbox Code Playgroud)

现在,我需要按SHA1哈希中指定的IP地址列出所有记录.我试过这个:

SELECT * FROM records 
WHERE SHA1(IPADDRESS)="da39a3ee5e6b4b0d3255bfef95601890afd80709"
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我该怎么做?
谢谢,艾萨克沃勒

Qua*_*noi 8

不知道它是否重要,但你的SHA1哈希da39a3ee5e6b4b0d3255bfef95601890afd80709是一个众所周知的空字符串哈希.

它只是一个例子,或者您忘记为IP哈希计算功能提供实际地址?

更新:

您的网页代码是否SHA1以小写形式生成哈希值?

此检查将失败MySQL:

SELECT  SHA1('') = 'DA39A3EE5E6B4B0D3255BFEF95601890AFD80709'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,使用此:

SELECT  SHA1('') = LOWER('DA39A3EE5E6B4B0D3255BFEF95601890AFD80709')
Run Code Online (Sandbox Code Playgroud)

,这将成功.

此外,您可以SHA1在将记录插入表中时预先计算哈希值:

INSERT
INTO    ip_records (ip, ip_sha)
VALUES  (@ip, SHA1(CONCAT('my_secret_salt', @ip))

SELECT  *
FROM    ip_records
WHERE   ip_sha = @my_salted_sha1_from_webpage
Run Code Online (Sandbox Code Playgroud)

这将返回原始IP并允许索引ip_sha,以便此查询将快速工作.