Как создать правильный формат пароля для аутентификации Apache2 при использовании с DBD и MySQL 5.1?

Я хочу аутентифицировать пользователей для папки из базы данных MySQL 5.1 с AuthType Basic,
Пароли хранятся в виде простого текста (на самом деле они не являются паролями, поэтому не имеет значения).
Однако формат пароля для apache допускает только SHA1, MD5 в системах Linux, как описано здесь.

Как я могу создать правильный формат с запросом SQL? Похоже, формат Apache является двоичным форматом с длиной 20, но MySQL SHA1 функция возврата 40 долго.

Мой запрос SQL выглядит примерно так:

SELECT CONCAT('{SHA}', BASE64_ENCODE(SHA1(access_key))) FROM user_access_keys INNER JOIN users ON user_access_keys.user_id = users.id WHERE name = %s

где base64_encode является хранимой функцией (Mysql 5.1 не имеет TO_BASE64 еще). Этот запрос возвращает 61-байтовый BLOB-объект, который отличается от формата, используемого Apache. Как я могу создать такой же формат?

Вы можете предложить другой метод для этого тоже. Дело в том, что я хочу аутентифицировать пользователей из базы данных MySQL5.1, используя простой текст в качестве пароля.

1 ответ

Решение

Документ, на который вы ссылаетесь, не подразумевает не-Linux под "Unix-only", поэтому crypt() вам доступен. Поскольку вы, похоже, не заботитесь о безопасности, я полагаю, что это самый простой вариант наряду с функцией шифрования MySQL. Возможно, вы захотите использовать постоянное начальное значение в ваших запросах.

SELECT ENCRYPT(access_key, 'SA') FROM user_access_keys INNER JOIN users ON user_access_keys.user_id = users.id WHERE name = %s
Другие вопросы по тегам