То, что Datajam уже описал, является правильным.Вот дальнейшее объяснение.
Если вы не предоставите соль для функции ENCRYPT()
, то будет сгенерирована случайная соль, которая будет использоваться для шифрования строки.Соль - это всего два байта / символа.
Сначала я продемонстрирую, что если я дважды запускаю ENCRYPT()
с одной и той же строкой, это даст разные значения (потому что случайная соль отличается)
mysql> SELECT ENCRYPT('hello');
+------------------+
| ENCRYPT('hello') |
+------------------+
| 5Q5CiJWj4GItY |
+------------------+
1 row in set (0.02 sec)
mysql> SELECT ENCRYPT('hello');
+------------------+
| ENCRYPT('hello') |
+------------------+
| 7QHPY3iSLVdas |
+------------------+
1 row in set (0.00 sec)
Теперь, если я воспользуюсь последней записью и попытаюсь снова ENCRYPT()
, используя значение, которое у нас уже есть в качестве соли, мы получим тот же результат:
mysql> SELECT ENCRYPT('hello', '7QHPY3iSLVdas');
+-----------------------------------+
| ENCRYPT('hello', '7QHPY3iSLVdas') |
+-----------------------------------+
| 7QHPY3iSLVdas |
+-----------------------------------+
1 row in set (0.00 sec)
Просто чтобы доказать, что еслимы получим неправильную строку (пароль) с той же солью, мы получим другое значение.Обратите внимание, что в этом примере два первых символа (которые являются просто солью) остаются неизменными.
mysql> SELECT ENCRYPT('helloX', '7QHPY3iSLVdas');
+------------------------------------+
| ENCRYPT('helloX', '7QHPY3iSLVdas') |
+------------------------------------+
| 7QKDSis4DZnCU |
+------------------------------------+
1 row in set (0.01 sec)
Используя эту информацию, вы должны попытаться запустить функцию ENCRYPT()
на обоих серверах MySQL, указав один и тот жесоль с обоими вы должны получить тот же результат обратно.Если нет, то реализация crypt (), вероятно, различается между этими двумя.