Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > шифрование 3DES на PHP и дешифрование на Delphi


Автор: chiffa 16.6.2011, 14:58
Добрый день. Столкнулся с проблемой что необходимо на стороне сервера зашифровать информацию, делаю так:

Код

$key = "sssssss";

    $input = "TEST STR";

  $td = mcrypt_module_open('tripledes', '', 'ecb', '');
    $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    mcrypt_generic_init($td, $key, $iv);
    $encrypted_data = mcrypt_generic($td, $input);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);  

echo $encrypted_data;




А на стороне клиента расшифровать после получения. Делаю так:

Код

Hash:= TDCP_3des.Create(Self);
     Hash.Init('sssssss',KeySize,nil);
     Output:= Hash.DecryptString(Get_Res);
ShowMessage (Output);
      Hash.Burn;
      Hash.Free;


Результат - не дешифрует... Может кто сталкивался с таким, подскажите как правильно организовать эту связку? Буду весьма признателен!

Автор: chiffa 20.6.2011, 15:17
Никто не сталкивался с таким?....

Автор: kami 20.6.2011, 23:35
Цитата(chiffa @  20.6.2011,  15:17 Найти цитируемый пост)
Никто не сталкивался с таким?....

C PHP я не работал, но краткий поиск в интернете показал, что MCRYPT_RAND создает случайный (в принципе, и из названия понятно) вектор.
Приемному концу (компоненту 3Des) нужен этот вектор для правильной инициализации (а  никак не nil в качестве "отмазки").
В противном случае - о какой расшифровке может идти речь?

Кстати, попадались и примеры, как это безболезненно можно сделать (передать iv на приемный конец).

Автор: chiffa 21.6.2011, 09:26
>Кстати, попадались и примеры, как это безболезненно можно сделать (передать iv на приемный конец).

гм.. Если прямых ссылок на примеры не сохранилось, скажи по какому запросу искал, ибо мне найти не удалось...

Автор: kami 21.6.2011, 12:40
Цитата(chiffa @  21.6.2011,  09:26 Найти цитируемый пост)
, скажи по какому запросу искал,

Емнип, это http://php.net/manual/ru/function.mcrypt-create-iv.php

Автор: chiffa 11.7.2011, 15:26
Насколько я тебя понял здесь "Hash.Init('sssssss',KeySize,nil);" вмесито nil должен быть мой $iv из ПХП. Но как его вставить когда переменная String, а должна быть Point. Перегнать не удается...

Автор: cat512 11.7.2011, 16:22
Неправильно криптоваться/декриптоваться данные могут по двум причинам:
1 Некорректная инициализация алгоритма 3DES!
2.Типы строковых буферов Ansi/Unicode.
Попробуй объявить буфер как AnsiString

Автор: chiffa 11.7.2011, 16:57
AnsiString не помогло...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)