Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2008.09.07;
Скачать: [xml.tar.bz2];

Вниз

Аналог перловской функции crypt в Delphi   Найти похожие ветки 

 
Дмитрий   (2007-12-19 23:38) [0]

Здравствуйте!

У меня такой вопрос. Для того, чтобы закрыть паролем каталог на веб-сервере, используются файлы .htaccess и .htpasswd, во втором содержится в зашифрованном виде пароль.

Этот зашифрованный пароль можно получить с помощью функции Perl crypt. Алгоритмов, по которым работает эта функция, я не знаю.

Хочу создать на Delphi приложение, облегчающее изменение пароля на сервере.

Вопрос: как получить на Delphi результат, аналогичный использованию функции crypt? Есть ли аналог этой функции?


 
Рамиль ©   (2007-12-20 09:16) [1]

Он там не зашифрованный. Там хэш, md5, если не ошибаюсь.


 
Kerk ©   (2007-12-20 15:57) [2]

В справке написано "crypt - аналогично системному crypt"


 
Kerk ©   (2007-12-20 16:09) [3]

И это не хэш. Так как у функции 2 параметра - строка и пароль


 
Дмитрий   (2007-12-21 00:55) [4]


> Он там не зашифрованный. Там хэш, md5, если не ошибаюсь.

Хм... а какая все-таки функция в Delphi?


 
tesseract ©   (2007-12-21 10:18) [5]


> Хм... а какая все-таки функция в Delphi?


Нет такой функции, MD5 + delphi в гугле.  PHP -шники совсем обленились.


 
Дмитрий   (2007-12-22 04:03) [6]

В общем, сделал... получил пароль в виде $1$...$...
К сожалению, это не то, что мне нужно. Мне нужно пароль в виде 13 символов.
Вроде как там используется алгоритм DES (если нет - прошу меня поправить).
Может быть, у кого-нибудь есть его реализация?


 
palva ©   (2007-12-22 17:16) [7]

Реализацию DES (особенно, если на си) найти не сложно. Но что ты с ней будешь делать дальше? Ведь она делает совсем не то, что делает функция crypt. DES всего лишь "используется при реализации crypt". Но как - это вопрос. Если существует документ, который описывает этот процесс, тогда можно копать дальше. А если такого документа откопать не удастся, а задачу делать позарез надо, тогда придется использовать  перловые библиотеки dll (это в пределах 2х Мбайт) и вызывать функцию crypt из скриптового движка.


 
Дмитрий   (2007-12-23 04:29) [8]

Идея хорошая, трабл с реализацией.
Скачал Perl, взял dll (файл "perl510.dll"), в нем содержится строка "crypt", думаю, это именно та библиотека, которая нужна.
В разделе интерфейс объявил

function crypt(key, salt: PChar): PChar;
external "perl510";

в коде прописал:

Edit.Text:=crypt(PChar(Edit1.Text), "qq");

Выдает, что "Точка входа в процедуру crypt не найдена в библиотеке DLL perl510."

C чем связана ошибка? Не та библиотека, я неверно объявил функцию или что-то еще? Как правильно обратиться к библиотечной перловой функции из дельфи?


 
Дмитрий   (2007-12-23 04:47) [9]

Продвинулся чуть подальше... посмотрел dll-ку с помощью tdump и узнал, что там нет crypt, а есть win32_crypt. Заменив в вышеприведеном коде crypt на win32_crypt, получил Access Violation.

C чем это может быть связано и как бороться?


 
homm ©   (2007-12-23 12:26) [10]

> [5] tesseract ©   (21.12.07 10:18)
> PHP -шники совсем обленились.

Не скажи, он же сказал, что перловец :)

ЗЫ. PHP-шники пишут HTTP авторизацию вручную, в PHP это не сложно и дает болле гибкий результат.


 
palva ©   (2007-12-23 15:32) [11]

Дмитрий   (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.


 
palva ©   (2007-12-23 15:45) [12]

Если perl используется только для выполнения данной функции, то установку perl можно сильно почистить. Для работы потребуются perl58.dll perlSE.dll из директории bin и некоторые модули из библиотечных директорий lib и site. Какие модули нужны - это уже надо экспериментировать.


 
palva ©   (2007-12-23 21:58) [13]

Программа [11] остается работоспособной, если
1. Все директории, кроме bin и site удалить
2. В директории bin оставить файлы perl58.dll и perlSE.dll, остальное удалить
3. В директории site оставить только директории site\lib\auto и site\lib\Win32 со всем их содержимым, остальное удалить.
Получившая установка весит 2.6 Мб
Скорее всего можно удалять и дальше, но я бы не увлекался.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2008.09.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
2-1217418829
a.a.j.
2008-07-30 15:53
2008.09.07
Расширенный DBGrid


3-1204811873
Rax
2008-03-06 16:57
2008.09.07
Как можно узнать, какие строки показываются в DBGRID


2-1217331791
Оксана Вл.
2008-07-29 15:43
2008.09.07
Удаление


1-1198096706
Дмитрий
2007-12-19 23:38
2008.09.07
Аналог перловской функции crypt в Delphi


2-1217408913
денис_м
2008-07-30 13:08
2008.09.07
Настройки в программе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский