- 1
- 2
- 3
ENCRYPT(str[,salt])
Шифрует аргумент str, используя вызов системной функции кодирования crypt() из Unix. Аргумент salt должен быть строкой из двух символов (в версии MySQL 3.22.16 аргумент salt может содержать более двух символов):
Если функция crypt() в данной операционной системе недоступна, функция ENCRYPT() всегда возвращает NULL. Функция ENCRYPT() игнорирует все символы в аргументе str, за исключением первых восьми, по крайней мере в некоторых операционных системах - это определяется тем, как реализован системный вызов базовой функции crypt().
Сегодня при входе в админку сайта ошибся в последнем знаке 10 значного пароля, но успешно зашел. Повторил опыт опять успешно.
Глянул в код там такая проверка
AND password= ENCRYPT(concat('".mysqli_escape_string($ this->db_class->link,$pass)."',clients.salt),'SECRET_KE Y')";
Теперь рву волосы на жопе.
Говнокод мой.
The ENCRYPT() function is deprecated as of MySQL 5.7.6, will be removed in a future MySQL release, and should no longer be used. Consider using AES_ENCRYPT() instead.
ЗЫ не шутка, http://en.wikipedia.org/wiki/MySQL :
Initial release 23 May 1995; 19 years ago
Да у этих ленивых и жадных распиздяев и PHP 4.0 в изобилии...
Смысл в том, что если ничего остального не подходит, выбирается он. То ли я тогда доллар проебал, то ли он почему-то считался за подходящий символ, но выбирался именно DES.
Это видно. Нигде не написано, что DES хеширует первые 8 символов (а не 7?)
upd хотя и на русском
Кроме того, она использует только первые восемь символов строки str, поэтому более длинные строки, начинающиеся с тех же восьми символов, сгенерируют один и тот же результат (при использовании одинаковой соли).