![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Аналог перловской функции crypt в Delphi
Дмитрий © (2007-12-19 23:38:00)Здравствуйте!
У меня такой вопрос. Для того, чтобы закрыть паролем каталог на веб-сервере, используются файлы .htaccess и .htpasswd, во втором содержится в зашифрованном виде пароль.
Этот зашифрованный пароль можно получить с помощью функции Perl crypt. Алгоритмов, по которым работает эта функция, я не знаю.
Хочу создать на Delphi приложение, облегчающее изменение пароля на сервере.
Вопрос: как получить на Delphi результат, аналогичный использованию функции crypt? Есть ли аналог этой функции?
palva (2007-12-23 21:58:00) [1]Программа [11] остается работоспособной, если
1. Все директории, кроме bin и site удалить
2. В директории bin оставить файлы perl58.dll и perlSE.dll, остальное удалить
3. В директории site оставить только директории site\lib\auto и site\lib\Win32 со всем их содержимым, остальное удалить.
Получившая установка весит 2.6 Мб
Скорее всего можно удалять и дальше, но я бы не увлекался.
palva (2007-12-23 15:45:00) [2]Если perl используется только для выполнения данной функции, то установку perl можно сильно почистить. Для работы потребуются perl58.dll perlSE.dll из директории bin и некоторые модули из библиотечных директорий lib и site. Какие модули нужны - это уже надо экспериментировать.
palva (2007-12-23 15:32:00) [3]Дмитрий (23.12.07 04:29) [8]
Вряд ли вы сможете выполнить отдельно саму функцию crypt. Вам надо зарегистрировать Perl Script Engine. Для этого выполните команду
regsvr32 perlSE.dll
После чего вы сможете запускать тексты на perl как скрипты внутри htm или wsf-файлов. Из делфи нужно сначала создать объект MSScriptHost и в нем выполнять программу на perl. Пример:
{$APPTYPE CONSOLE}
uses ActiveX, ComObj;
var
sc: OleVariant;
begin
CoInitialize(nil);
sc := CreateOleObject('MSScriptControl.ScriptControl');
sc.Language := 'PerlScript';
WriteLn(sc.Eval('crypt(''password'', ''uy'')'));
end.
homm (2007-12-23 12:26:00) [4]> [5] tesseract © (21.12.07 10:18)
> PHP -шники совсем обленились.
Не скажи, он же сказал, что перловец :)
ЗЫ. PHP-шники пишут HTTP авторизацию вручную, в PHP это не сложно и дает болле гибкий результат.
Дмитрий (2007-12-23 04:47:00) [5]Продвинулся чуть подальше... посмотрел dll-ку с помощью tdump и узнал, что там нет crypt, а есть win32_crypt. Заменив в вышеприведеном коде crypt на win32_crypt, получил Access Violation.
C чем это может быть связано и как бороться?
Дмитрий (2007-12-23 04:29:00) [6]Идея хорошая, трабл с реализацией.
Скачал Perl, взял dll (файл "perl510.dll"), в нем содержится строка "crypt", думаю, это именно та библиотека, которая нужна.
В разделе интерфейс объявил
function crypt(key, salt: PChar): PChar;
external 'perl510';
в коде прописал:
Edit.Text:=crypt(PChar(Edit1.Text), 'qq');
Выдает, что "Точка входа в процедуру crypt не найдена в библиотеке DLL perl510."
C чем связана ошибка? Не та библиотека, я неверно объявил функцию или что-то еще? Как правильно обратиться к библиотечной перловой функции из дельфи?
palva (2007-12-22 17:16:00) [7]Реализацию DES (особенно, если на си) найти не сложно. Но что ты с ней будешь делать дальше? Ведь она делает совсем не то, что делает функция crypt. DES всего лишь "используется при реализации crypt". Но как - это вопрос. Если существует документ, который описывает этот процесс, тогда можно копать дальше. А если такого документа откопать не удастся, а задачу делать позарез надо, тогда придется использовать перловые библиотеки dll (это в пределах 2х Мбайт) и вызывать функцию crypt из скриптового движка.
Дмитрий (2007-12-22 04:03:00) [8]В общем, сделал... получил пароль в виде $1$...$...
К сожалению, это не то, что мне нужно. Мне нужно пароль в виде 13 символов.
Вроде как там используется алгоритм DES (если нет - прошу меня поправить).
Может быть, у кого-нибудь есть его реализация?
tesseract (2007-12-21 10:18:00) [9]
> Хм... а какая все-таки функция в Delphi?
Нет такой функции, MD5 + delphi в гугле. PHP -шники совсем обленились.
Дмитрий (2007-12-21 00:55:00) [10]
> Он там не зашифрованный. Там хэш, md5, если не ошибаюсь.
Хм... а какая все-таки функция в Delphi?
Kerk (2007-12-20 16:09:00) [11]И это не хэш. Так как у функции 2 параметра - строка и пароль
Kerk (2007-12-20 15:57:00) [12]В справке написано "crypt - аналогично системному crypt"
Рамиль (2007-12-20 09:16:00) [13]Он там не зашифрованный. Там хэш, md5, если не ошибаюсь.