Я хочу использовать хэш () рассчитать / найти сходство между двумя строками.
В PHP есть много поддерживаемых алгоритмов хеширования. Список можно получить с hash_algos ().
Какой лучший рекомендуемый алгоритм для использования?
Ваш вопрос слишком двусмысленный.
Во-первых, вы говорите, что хотите вычислить сходство между двумя строками. Это не требует хеширования вообще. Вы можете просто использовать compare
, equality
, levenshtein distance
, edit distance
и т.д. для этого.
Почему мы используем хеширование
Если есть некоторые конфиденциальные данные, которые мы не можем хранить в открытом тексте а также нам не нужно использовать данные при какой-либо обработке, вычислениях или изменении данных, а нужно только сравните это с точным равенством, мы используем хеширование.
eg. storing user passwords, which would need only comparison with the password string once he tries logging in
параметры
Скорость, безопасность (и, возможно, популярность)
Некоторые из самых популярных хэшей включают md5, SHA-1, SHA-256 and SHA-512
, Это порядок их безопасности и относительно медленный.
fast, less secure | md5 < SHA-1 < SHA-256 < SHA-512 | relatively slow, more secure
Я бы порекомендовал использовать SHA-1 или SHA-256, которые достаточно быстрые и достаточно безопасные.
Кроме того, используйте секретную соль для многократного повышения безопасности (использование соли во время хеширования повышает безопасность по экспоненте по очевидным причинам).
Хеш не имеет ничего общего с подобием. Более того, большинство алгоритмов хеширования дают результаты, почти полностью отличающиеся для очень похожих строк. Например, SHA1 из:
The quick brown fox jumps over the lazy dog
знак равно 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
а разница с одним символом совершенно другая строка:
The quick brown fox jumps over the lazy cog
знак равно de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3
Существуют простые и хорошо известные алгоритмы поиска сходства строк. Расстояние Хемминга для струн одинаковой длины, Расстояние Левенштейна для разной длины строки лишь несколько примеров строковые метрики
Постскриптум если вы действительно хотите использовать хеширование — правильный термин для этого типа хеширования хеш, сохраняющий локальность. Вы можете прочитать об этом Вот.