разные контрольные суммы sha1 на разных версиях php? - PullRequest
2 голосов
/ 02 июля 2010

Я запускаю этот скрипт:

define('SECRET', "vJs;ly-W\XDkD_2'-M7S2/ZRRBobxt5");
echo sha1(SECRET . 'zcbkeyky' . 'aaa@bbb.com') . "\n";

Локально с PHP 5.3.2 (cli) это дает мне: 3baa47e50394cd2dce236dcbf2f409fdb9010f2a
На удаленной машине с PHP 5.1.6 (cli) выдает: d1bcf4ea83e50593d3df19a8455a5f5cd32d63ef

Почему один и тот же расчет отличается?

Ответы [ 2 ]

9 голосов
/ 02 июля 2010

Я бы сказал, что проблема здесь:

define('SECRET', "vJs;ly-W\XDkD_2'-M7S2/ZRRBobxt5");
//                        ^^-- escape character

Руководство по PHP говорит:

\x[0-9A-Fa-f]{1,2} последовательность символов, соответствующая регулярному выражению, является символом в шестнадцатеричной записи

Между PHP 5.2 и 5.3, очевидно, это было изменено, чтобы также соответствовать \X[0-9A-Fa-f]{1,2} (обратите внимание на заглавную букву X в начале). При работе в PHP 5.3 у вас (по незнанию?) Есть возврат каретки в вашей строке.

Либо а) замените обратную косую черту другим символом, либо б) используйте одинарные кавычки при определении SECRET, и обе версии вернут один и тот же хеш (пробовал в 5.2.1 и 5.3.2).

2 голосов
/ 02 июля 2010

Единственное, о чем я могу думать, это о кодировании файлов / строк на каждом сервере?

Мой результат - 3baa47e50394cd2dce236dcbf2f409fdb9010f2a (локально)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...