Когда я использую функцию php crypt (), используя алгоритм Blowfish с веб-сервером:
<?php
echo crypt('SAD123', sprintf('$2a$10$%s', '7711cbpe58dfpogiu049857f011werb0'));
Я получаю этот результат:
$2a$10$7711cbpe58dfpogiu0498u5Vh773A3qx.3LE3ro3NX7F9c9N7.pOm
Но если я использую интерпретатор PHP с командной строкой:
php -r "echo crypt('SAD123', sprintf('$2a$10$%s', '7711cbpe58dfpogiu049857f011werb0'));"
Я получаю другой результат:
a0SqNHxQ8/2mA
Есть ли у вас какие-либо идеи?
Система является:
Apache / 2.2.3 (CentOS),
Версия PHP 5.4.26
Это связано с тем, что знаки доллара со следующими цифрами в командной строке также интерпретируются как позиционные параметры в баш.
Когда вы избежите их, он будет работать как положено:
$ php -r "echo crypt('SAD123', sprintf('\$2a\$10$%s', '7711cbpe58dfpogiu049857f011werb0'));"
Поэтому, когда вы хотите поработать с каким-то PHP в строке комманов, вам нужно просто запустить его в интерактивном режиме:
$ php -a
php > echo crypt('SAD123', sprintf('$2a$10$%s', '7711cbpe58dfpogiu049857f011werb0'));
Других решений пока нет …