Доброго для ребята… Авторизация на сайте http://testapi.screeninghub.ge/api/Authorize/SignIn делается через Postman таким образом : генерируется хэшей SHA512 из сайте SHA512 Hash Generator Online передаётся UserName , pasword , SecretKey и текущая дата, на пример: Mylogin@gmail.comNfdgdfg654jdfJUghjgh22.04.2021 вот так без пробелов. у Postman-ов вкладке Headers передаётся это генерирование хэшей и в кладке Body тип raw и JSON формате ещё логин и пароль . вот так
{
"userName": "Mylogin",
"password": "********"
}
и получаю “success”: true я пытаюсь передать параметры
procedure TForm1.Button1Click(Sender: TObject);
var
MyParams : TStringList;
DT : TDateTime;
//---------------------------
IdHashSHA1: TIdHashSHA1;
begin
DT:= Now;
try
// ---TStringList Создать
MyParams:= TStringList.Create;
//-------------------------------
IdHashSHA1:=TIdHashSHA1.Create;
//---- Всё параметри внимательно
MyParams.Add('userName=mylogin') ;
MyParams.Add('pasword=******');
MyParams.Add('SecretKey=jv76sfdhghjhgk,hjkjhd') ;
MyParams.Add(DateToStr(DT));
//-------------Вот здесь не понял как мне генерировать это Генератор хэшей SHA512--------------------
IdHashSHA1.HashStreamAsHex(MyParams);
//--------HandleRedirects := true; ----------------------
IdHTTP1.HandleRedirects := true;
// -------
IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
//--
IdHTTP1.Request.ContentType := 'application/json, application/x-www-form-urlencoded'; // application/x-www-form-urlencoded // application/json
IdHTTP1.Request.Charset := 'utf-8';
// Хранить тексть запроса на
Memo1.Text := (IdHTTP1.Post('http://testapi.screeninghub.ge/api/Authorize/SignIn', MyParams));
finally
MyParams.Free;
end;
Не проходить , потом думаю что надо генерировать SHA512 и то не получилось .
procedure TForm1.Button1Click(Sender: TObject);
var
pSHA : TIdHashSHA1;
begin
pSHA := TIdHashSHA1.Create;
try
Memo1.Text := pSHA.HashStringAsHex('Mylogin@gmail.comNfdgdfg654jdfJUghjgh22.04.2021');
finally
pSHA.Free;
end;
end;
Вопрос: Как и что я должен передать на Delphi XE3 ?
Основа поддержки хеширования впервые появилась в RTL около выпуска 2009 года, но в XE8 (2015) мы получили модуль System.Hash , который принес хеши MD5, SHA-1 и Боба Дженкинса. Затем в 10.0 Seattle (2015) он был расширен за счет поддержки SHA-2 . Совсем недавно в версии 10.2 Tokyo (2017) хэш-функции были расширены, чтобы принимать либо строку, либо поток в дополнение к исходным байтам
procedure TForm1.Button1Click(Sender: TObject);
var
UserName, SecretKey, Password: string;
mydate : string;
Fullparam : string;
Hash : string;
begin
UserName := 'MyLogin';
SecretKey := 'jghhjgghjhkhjkhhhhjkjhk';
Password := 'MyPass';
mydate := FormatDateTime('dd.mm.yyyy',now());
Fullparam := UserName+SecretKey+Password+mydate;
Hash := THashSHA2.GetHashString(Fullparam, THashSHA2.TSHA2Version.SHA512).ToUpper;
// для проверки получаю в Memo1 и это проверял Postman-е
Memo1.Text := Hash;
end;
end.
Установил RAD Studio 10.4 и хеширования SHA512 работает нормально… Нечего страшного если я напишу только эту форму на RAD Studio 10.4 и потом буду вызвать .exe файл
Так это про стандартные библиотеки самого Дельфи речь, но выше в коде же использовался Инди, и там вроде можно и раньше, как по моей ссылке советуют подключить OpenSSL для Инди, и тогда вроде бы появится поддержка и SHA512 в Инди. Судя по гуглу TIdHashSHA512 в Инди был как минимум в 2010.
Уже разобрался RAD Studio 10.4 с помощью модуль System.Hash и напишу эту форму на Delphi 10.4 и компилирование exe файл можно вызвать из XE3 так ShellExecute(Handle,PChar('open'),PChar('полный путь к первому exe'),nil,nil,0);
Не, и так много время потерял и главное результат… как я это решаю не кому не интересно … я с вами согласен это когда работаешь в команде - там надо учитывать других мнения тоже … А так это какой то часть одного проекта - который надо быстро набабахат и забыть как страшный сон уже весна — на рыбалку надо ходить
Я тоже это подозреваю , MyParams.Add(‘Hash=’+Hash+’’); = это не JSON MyParams.Add(‘userName=MyLogin’); и MyParams.Add(‘password=MyPass’); они JSON да… Значить надо Hash передать как и есть и userName=MyLogin и password=MyPas передать как JSON потом надо передать
Чтобы убедиться что всё отправляется так, как надо, можно например использовать Fiddler или https://hookbin.com/ (для фиддлера надо разрешить его SSL сертификат и указать его прокси в клиенте, для второго — нажать Create и отправить запрос на указанный адрес).