使用带 PHP 的 PHASH 生成哈希

Generate hash using PHASH with PHP

如何从 PHP 中的字符串生成 PHASH 值?

我继承了一个 ASP 代码库,它利用 PHASHstrings 不是图像路径 )。根据研究,PHASH 用于图像。

我目前正在使用 PHP 重写这部分代码库,有几个库似乎很有用:

但是,它们都需要图像的路径。我试过 jenssegers/imagehash ,当我传递一个随机字符串时会抛出异常。

下面的代码说明了 PHASH 当前如何在遗留代码库中使用:

sLoginPassword = RequestValue("Password")
SQLVal(PHASH(sLoginPassword))

更新

PHASH 是代码库中的自定义函数,由于大小写混合(PHash vs PHASH),我最初找不到它。

幸好我找到了下面的SO answer,写在C#中。感谢@Lathejockey81 提供答案,我已将其转换为下面的 PHP(作为答案)。

SO answer:

转换而来的自定义 PHASH 函数
function PHASH($string)
{
    $value = trim(strtoupper($string));

    $dAccumulator = 0;
    $asciiBytes = [];

    for($i = 0; $i < strlen($value); $i++) {
        $asciiBytes[] = ord($value[$i]);
    }

    for($i = 0; $i < count($asciiBytes); $i++) {
        if(($i & 1) == 1) {
            $dAccumulator = cos($dAccumulator + (float) $asciiBytes[$i]);
        } else {
            $dAccumulator = sin($dAccumulator + (float) $asciiBytes[$i]);
        }
    }
    $dAccumulator = $dAccumulator * pow(10, 9);

    return round($dAccumulator);
}