PHP-困境,当没有其他信息已知时搜索哈希字段

我感到两难.我有一个hashedX字段,它是一个哈希值/盐值,盐通常按照惯例保存在mysql数据库的同一行中.

hashedX      saltX
------       ------
hashed1      ssai3
hashed2      woddp
hashed3      92ofu

收到inputX时,我需要知道它是否与hashedX中的任何值匹配,例如hashed1 hashed2或hashed3.因此,通常我会接受输入,对其进行哈希处理/添加盐,然后将其与hashedX的值进行比较.伪代码:

$hashed_input = hash ($input with $salt );
select * from tablename where $hashed_input is hashedX

问题是我不知道在进行任何选择之前我什至需要进入$hashed_input哪个saltX.

我可以一个接一个地浏览数据库行,在输入中尝试添加该盐,然后检查该盐的哈希值/盐值输入是否与同一行的hashX匹配.如果我有100,000条记录,我的猜测是这将非常缓慢.我不知道有多慢,因为我不太擅长数据库.

>有没有比选择所有行,遍历所有行,使用该行的salt哈希输入然后再次与db中的哈希值进行比较的更好方法?

解决方法:

如果可能(取决于您的哈希公式),请为哈希公式定义一个MySQL用户定义函数数据库端(请参见CREATE FUNCTION).这样,您将能够在一个简单的请求中获得结果:

SELECT hashedX, saltX FROM tablename WHERE UDFhash(input, saltX) = hashedX ;
上一篇:php-加密静态数据


下一篇:无法使用AES / ECB / PKCS5Padding将加密方法从Java复制到PHP