Мне нужен способ необратимой шифровки строк в PHP.
Нужно чтобы строго определенный вход давал строго определенный результат
Я нашел только способ задания salt в password_hash, но вылезает предупреждение, да и первая половина строки повторяется - способ костыльный
Какие есть способы сделать такое?
PHP
PHP необратимое шифрование
При таких условиях тебе надо НЕ хэширование пароля, а обычное хэширование БЕЗ соли: https://www.php.net/manual/ru/function.hash.php и выбираешь подходящий алгоритм шифрования. Самый очевидный выбор - SHA-2 (sha256, sha384, sha512).
Смотря какова цель этого всего. Если для подписи, то можно к примеру hmac использовать)
https://www.php.net/manual/ru/function.hash-hmac.php
https://www.php.net/manual/ru/function.hash-hmac.php
не заметно понимание принципов. оно ж и выполняться не будет, если вы сможете так сделать
имеет ли смысл необратимое шифрование. Это уже скорее хэш а не шифрование, PHP по базе поддерживает md5 и sha256, но если нужно создать свой генератор хеша то выбери стандарт, например это будет 8 чисел. теперь эти 8 чисел извлеки из входных данных, например первое число это сумма ASCII индексов всех символов в строке. Второе число это сумма всех четных по итерации символов, а третье будет например суммой всех итераций строки выбранной в порядке фибоначчи. ;D итд
Как понять "необратимое шифрование"? Ты понимаешь, что значит шифрование?
Скорее всего ты ищешь хеширование паролей, чтобы безопасно хранить хеши в базе.
Использование md5 давно неприемлемо, а использование sha256 хоть и возможно, но не рекомендуется из-за отсутствия динамики, т. е. 123 всегда будет a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 и никогда не меняется. Хотя в этом случае можно использовать соль, но если будет слита не только база, но и php скрипты, то толку от соли уже не будет.
Поэтому использование bcrypt это самый нормальный вариант сейчас.
Что значит "способ костыльный"? В твоем контексте это неприемлемо, эта функция сейчас самый безопасный простой вариант, который можно найти. Это хеширование динамичное, т. е. сколько не хешируй пароли, они всегда будут разные, из-за чего при сливе твоей базы нельзя будет отыскать пароли в уже имеющихся базах, придется брутить. А если указать свою соль, то брут будет бесполезным, если только не сольют ключ или скрипты. Если пароль более-менее безопасный, то брут может длиться триллионы лет (при текущих современных мощностях машин), что делает это в принципе бесполезным.
>> "первая половина строки повторяется" <<
повторяется только "$2y$10$", что означает 2 в 10 степени повторений. Ты можешь изменить 10, задав cost в параметрах. Сейчас распространенный вариант это cost = 12. Остальная часть это хеш.
>> "вылезает предупреждение" <<
может быть хоть скажешь что за предупреждение? если все правильно делать, то ничего не вылезает, все работает как надо
Пример использования:
При регистрации:
$hash = password_hash($_POST["password"], PASSWORD_BCRYPT);
При авторизации:
if (password_verify($_POST["password"], $db->password_hash)) // ...
Свои cost и salt (для php 7):

Скорее всего ты ищешь хеширование паролей, чтобы безопасно хранить хеши в базе.
Использование md5 давно неприемлемо, а использование sha256 хоть и возможно, но не рекомендуется из-за отсутствия динамики, т. е. 123 всегда будет a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 и никогда не меняется. Хотя в этом случае можно использовать соль, но если будет слита не только база, но и php скрипты, то толку от соли уже не будет.
Поэтому использование bcrypt это самый нормальный вариант сейчас.
Что значит "способ костыльный"? В твоем контексте это неприемлемо, эта функция сейчас самый безопасный простой вариант, который можно найти. Это хеширование динамичное, т. е. сколько не хешируй пароли, они всегда будут разные, из-за чего при сливе твоей базы нельзя будет отыскать пароли в уже имеющихся базах, придется брутить. А если указать свою соль, то брут будет бесполезным, если только не сольют ключ или скрипты. Если пароль более-менее безопасный, то брут может длиться триллионы лет (при текущих современных мощностях машин), что делает это в принципе бесполезным.
>> "первая половина строки повторяется" <<
повторяется только "$2y$10$", что означает 2 в 10 степени повторений. Ты можешь изменить 10, задав cost в параметрах. Сейчас распространенный вариант это cost = 12. Остальная часть это хеш.
>> "вылезает предупреждение" <<
может быть хоть скажешь что за предупреждение? если все правильно делать, то ничего не вылезает, все работает как надо
Пример использования:
При регистрации:
$hash = password_hash($_POST["password"], PASSWORD_BCRYPT);
При авторизации:
if (password_verify($_POST["password"], $db->password_hash)) // ...
Свои cost и salt (для php 7):

Женя Юферов
если тебе прямо так не хочется, чтобы в хеше было $2y$NN$, то ты можешь отсеивать это, но каждый раз при проверке вместо password_verify использовать снова password_hash и опять проводить отсев, потом сравнить, только непонятно зачем такой гемор, если $2y$NN$ просто является вспомогательной информацией для password_verify
Женя Юферов
Также можно шифровать или сжимать хеш самописной или любой встроенной функцией для шифрования, и просто получая из базы расшифровывать перед проверкой
Похожие вопросы
- PHP Polling ChatGPT
- Как оптимизировать структуру сайта php. на готовом шаблоне
- Не работает PHP include на хостинге
- Хеширование пароля php
- Подскажите хороший курс по PHP практике?
- Пишу авторизацию (php). Куки не работают
- Вопрос начинающего программиста Python\PHP
- Как в PHP указать тип переменной unsigned int?
- какой функционал делают на сайтах с помощью php? вообще не пойму что конкретно пишут на этом языке на сайтах..
- Смогу ли я устроиться стажером php?