Используйте SSL с Delphi, и все же имеющим единственный exe

Вопрос плохо формируется.

существуют ситуации, где Вам нужен стек, другие, где Вам нужна "куча", другие, где Вам нужно статическое устройство хранения данных, другие, где Вам нужны данные оперативной памяти константы, другие, где Вам нужно свободное хранилище.

стек быстр, потому что выделение является просто "инкрементом" по SP, и все "выделение" выполняется во время вызова функции, в которой Вы находитесь. "Куча" (или свободное хранилище) выделение/освобождение время больше дорогая и подверженная ошибкам.

8
задан John Thomas 19 November 2009 в 09:29
поделиться

7 ответов

Попробуйте SSLBlackBox .

8
ответ дан 5 December 2019 в 08:24
поделиться

Тендри дал вам хороший ответ. Я тоже использую SecureBlackBox. Вы можете рассмотреть некоторые другие сторонние компоненты:

4
ответ дан 5 December 2019 в 08:24
поделиться

Лучшим способом было бы выполнить новую установку.

Измените URL-адрес сайта на действующий перед экспортом базы данных. Импортируйте свою базу данных на действующий сервер. Загрузите и распакуйте файлы Magento. он может стать ограниченным для экспорта . Если вы находитесь в США, это может означать, что ваше приложение нельзя продать или передать людям за пределами США. Вот почему эти DLL не являются частью Indy или Delphi.

Библиотеки, которые использует Delphi, на самом деле являются скомпилированными DLL из проекта OpenSSL . Но если вы хорошо знакомы с C, вы сможете скомпилировать исходный код в файлы .obj и вместо этого связать их с вашим кодом Delphi. Для этого вам, вероятно, также потребуется изменить часть кода Indy. Конечно, это могли бы сделать и другие, но это усложняет экспорт этих компонентов Indy (или даже самого Delphi) из-за этих экспортных ограничений.

Как ни странно, исходный код защищен первой поправкой, которая в основном позволяет вам распечатать код в книге, а затем отправить его какой-нибудь стране-изгоям. Хотя, если вы отправите его в цифровом виде (скомпилированном или нет), вы совершите федеральное правонарушение и, вероятно, вам придется быть осторожным, собирая мыло в душе в течение как минимум года ... законы имеют смысл. Они могут быть просто головной болью [звуковой сигнал] ...

Другие решения SSL не работают вместе с компонентами Indy, что означает, что вам придется переписать часть вашего кода для поддержки этих других решений.


Эта ссылка сообщает, как вы можете загрузить DLL из памяти, поэтому вам не нужно иметь ее на диске. Это альтернативное решение, которое я не пробовал. Я не думаю, что это сработает, поскольку две библиотеки DLL зависят друг от друга,
3
ответ дан 5 December 2019 в 08:24
поделиться

Я использую Microsoft CAPICOM для SSl3, и он решил мои потребности ... Он свободно распространяется , но больше не поддерживается

Если вы попробуете другие компоненты, возможно, вам стоит обратиться к SYNAPSE ( на http://synapse.ararat.cz/ ) (я также использую), он может работать с StreamSec (и другими) для отправки электронных писем по ssl. Это бесплатно и легко работать.

1
ответ дан 5 December 2019 в 08:24
поделиться

Const

  cdoSendUsingMethod = 'http://schemas.microsoft.com/cdo/configuration/sendusing';  
  cdoSMTPServer = 'http://schemas.microsoft.com/cdo/configuration/smtpserver';  
  cdoSMTPServerPort = 'http://schemas.microsoft.com/cdo/configuration/smtpserverport';  
  cdoSendServerPort = '25';  
  cdoSendUsingPort = 2;  
  cdoSMTPConnectionTimeout = 'http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout';  
  cdoSMTPAuthenticate = 'http://schemas.microsoft.com/cdo/configuration/smtpauthenticate';  
  cdoAnonymous = '0';  
  cdoBasic = '1';  
  cdoSMTPUseSSL = 'http://schemas.microsoft.com/cdo/configuration/smtpusessl';  
  cdoSendUserName = 'http://schemas.microsoft.com/cdo/configuration/sendusername';  
  cdoSendPassword = 'http://schemas.microsoft.com/cdo/configuration/sendpassword';  
  cdoURLGetLatestVersion = 'http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion';  

...

function SensCDOMail (ASubject, AFrom, ATo, ABody, ASmtpServer : WideString): String;  
var 

  cdoMessage:OleVariant;  
  cdoConfiguration: OleVariant;  

begin  

  //Configuration Object  
  cdoMessage:= CreateOleObject('CDO.Message');  
  cdoConfiguration:= CreateOleObject('CDO.Configuration');  
  try  

    cdoConfiguration.Fields(cdoSendUsingMethod):= cdoSendUsingPort;  
    cdoConfiguration.Fields(cdoSMTPServer):= ASmtpServer;  
    cdoConfiguration.Fields(cdoSMTPServerPort):= cdoSendServerPort;  
    cdoConfiguration.Fields(cdoSMTPAuthenticate):= cdoAnonymous;  
    cdoConfiguration.Fields(cdoSMTPUseSSL ):= True; // use SSL  
    cdoConfiguration.Fields.Update;  
    cdoMessage.Configuration:= cdoConfiguration;  
    cdoMessage.To       := ATo;
    cdoMessage.From     := AFrom;
    cdoMessage.Subject  := ASubject;
    //cdoMessage.HTMLBody := ABody;   //Want to send in Html format
    cdoMessage.TextBody := ABody;     //Want to send in text format
    cdoMessage.Send;

  finally  
    VarClear(cdoMessage);  
    VarClear(cdoConfiguration);  
  end;  
end;  

0
ответ дан 5 December 2019 в 08:24
поделиться

Можно включить эти библиотеки DLL в исполняемый файл программы в качестве ресурсов и либо экспортировать их в файлы при использовании, либо даже использовать их без предварительного экспорта путем перемещения кода и поиска точек входа в памяти . У меня где-то есть код для последнего ....

0
ответ дан 5 December 2019 в 08:24
поделиться

Требуется ли «Единый EXE-файл» для целей распространения или он также должен быть одним файлом .EXE при запуске на машине клиента?

Если это только для целей распространения, вы можете добавить файлы DLL в конец вашего .EXE-файла, а затем - при запуске программы - извлеките их из .EXE-файла и сохраните их локально как файлы .DLL, примерно так:

VAR F,O : FILE;
VAR BUF : ARRAY[1..<MaxSizeOfDLLs>] OF BYTE;
ASSIGN(F,ParamStr(0)); RESET(F,1);
SEEK(F,<OriginalExeSize>);
BLOCKREAD(F,BUF,<FirstDllSize>);
ASSIGN(O,<NameOfFirstDLL>); REWRITE(O,1);
BLOCKWRITE(O,BUF,<FirstDllSize>); CLOSE(O);
BLOCKREAD(F,BUF,<SecondDllSize>);
ASSIGN(O,<NameOfSecondDLL>); REWRITE(O,1);
BLOCKWRITE(O,BUF,<SecondDllSize>); CLOSE(O);
SEEK(F,<OriginalExeSize>); TRUNCATE(F); CLOSE(F)

Quick'n'Dirty, неправильно отформатирован и т. д., но должен дать вам основную идею.

2
ответ дан 5 December 2019 в 08:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: