Сгенерировать хеш, используя PHASH с PHP

Как я могу сгенерировать значение PHASH из строки в PHP?

Я унаследовал кодовую базу ASP, в которой используются PHASH с strings (не пути к изображениям). Согласно исследованиям, PHASH используется для изображений.

В настоящее время я переписываю эту часть кодовой базы, используя PHP, и есть несколько библиотек, которые кажутся полезными:

Однако им обоим требуется путь к изображению. Я пробовал jenssegers/imagehash, и это вызывает исключение, когда я передаю случайную строку.

Код ниже того, как PHASH в настоящее время используется в устаревшей кодовой базе:

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

Обновлять

PHASH — это пользовательская функция в кодовой базе, я не смог найти ее изначально из-за смешанного регистра (PHash против PHASH).

К счастью, я нашел следующий ответ SO, который написан на C#. Спасибо @Lathejockey81 за ответ, я преобразовал его в PHP ниже (в качестве ответа).


person steadweb    schedule 11.06.2018    source источник
comment
К счастью, я нашел это - stackoverflow.com /questions/18582667/ - И, если копнуть поглубже, похоже, что это пользовательская функция, хотя на нее ссылаются как PHash, а не PHASH   -  person steadweb    schedule 11.06.2018
comment
Вы хотите хешировать пароль? почему бы не использовать встроенные хэши, такие как sha1()   -  person Liam G    schedule 11.06.2018
comment
Нет, я хочу знать, как реконструировать функцию PHash, указанную выше, в PHP :) - я дам ответ вскоре после преобразования кода.   -  person steadweb    schedule 11.06.2018


Ответы (1)


Пользовательская функция PHASH преобразована из SO answer:

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);
}
person steadweb    schedule 11.06.2018