Господа, я скоро сойду с ума.
И так задача. На стороне клиента шифрую строку по алгоритму 3DES CBC. IV передаю вместе с этой строкой. Передаю это всё php скрипту. Пытаюсь расшифровать и получается полная херня. Не расшифровывает он :( Вернее скрипт отрабатывает, но на выходе полная лажа!Со стороны клиента: Delphi 7 + TDCP_3des.
Со стороны сервера: PHP 4.3.5 + mcrypt 2.4. Система FreeBSD. собирал из портов.На стороне сервера скрипт выглядит так:
<Вытаскиваем шифрованую строку и IV>
$p_t = mcrypt_cbc(MCRYPT_3DES,$secret,$c_t,MCRYPT_DECRYPT,$iv);По идее должен расшифровать. Но вот пример:
На входе шифрованая строка: iSaWEW0UhTlqy/8R+n96xESE2X2uGMugMUeylnHaH0dHXM4TtvP08vxyPVlvnCVFgtjJUfboRW0lDixpНа выходе после "расшифровки":
„ЕВфNмЪ/‡ ЩWВзЪ·ч‰ZІїrUd|у`иНUnOШ;кЦs¦ѓ&Ѕ‡(тејцъРкЂMгл№мЁfF1HкГusя,›ШјЌЏQl "ЋH@=zT~;E(РШ—iрLЎ§УќV;жд°@3Џ/иrYrjу@вє(61Хз/•ҐЛјHFфKшr0Дщ‰ќЇiС°’†—ёКлюч: c47ed26705753d2200000000
IV(побайтно): 243,80,18,208,72,16,101,126Попробуйте расшифровать. Если получится - стуканите в асю 194789332 или на мыло leonid(doggy)aml.ru
Что делать? Нифина не понимаю :(
интересно, у меня после расшифровки выходит:èê¼úà8Ù ðOwî6j»ÛZ™Ç`R!”–µªÄ‰Ìõˆc±©D› ¥n.À#ÛâdÜãÚ¸Âö‡2ÈU³.}8V®p•ûhlÅaa¯5›¼tÈtÁ
зашифрованая строка приведена в виде, в кот. она создаётся на клиенте или в таком, в каком она попадает в PHP скрипт?
iSaWEW0UhTlqy/8R+n96xESE2X2uGMugMUeylnHaH0dHXM4TtvP08vxyPVlvnCVFgtjJUfboRW0lDixp
В скрипт передаётся в шестнадцатиричном виде (типа bin2hex).
Вот эта же строка приходящая в скрипт:
695361574557305568546c71792f38522b6e39367845534532583275474d75674d5565796c6e486148306448584d3454747650303876787950566c766e43564667746a4a5566626f5257306c44697870Дальше скрипт делает обратное преобразование hex2bin и полученное значение расшифровывает.
После расшифровки должно получиться:
100000&auth=a4445c73667f047b8147b9a3ef5993c5aa4&action=check
пробовал шифровать
>100000&auth=a4445c73667f047b8147b9a3ef5993c5aa4&action=check
на разных платформах и библиотеках.в качестве зашифрованой строки
>iSaWEW0UhTlqy/8R+n96xESE2X2uGMugMUeylnHaH0dHXM4TtvP08vxyPVlvnCVFgtjJUfboR>W0lDixp
никак не получается.
Это получилось после шифрования DCPCrypt v2 в Delphi.
Сейчас эксперементирую с другими библиотеками. Пока что тоже не получается.
Может быть кто-нибудь даст конкретные рекомендации по процессу? Может быть я что-то не понимаю?
Я делаю следующие действия:
1. Криптую строку. Сейчас эксперементирую с пакетом tplockkbox. Может посоветуете какую-нибудь другую библиотеку для Delphi?
2. В запросе передаю её серверу. Ключ серверу известен.
3. Исполняется скрипт:
$c_t = <шифрованая строка>
$td = mcrypt_module_open ('tripledes', '', 'cbc', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
mcrypt_generic_init ($td, $secret, $iv);
$dec = mdecrypt_generic ($td, $c_t);По идее должна получиться расшифрованая строка с первыми 8-ю символами неверно расшифрованными, из-за того что iv не тот. Но не получается :(
>По идее должна получиться расшифрованая строка с первыми 8-ю символами >неверно расшифрованными,
>из-за того что iv не тот. Но не получается :(другой iv должен давать полностью другой текст, т.к. все 64-битные блоки в режиме CBC шифруютя с учётом предыдущих блоков:
http://www.argosoftware.ru/Base/DES/Cbc.html
Ок. Использую ECB.
Исходная строка:
11111111&auth=a4445c73667f047b8147b9a3ef5993c5aa4&action=check
Шифруем и отправляем:
/c2OEyHm7tAKmJeMjR9UrVhLLti4xS62cYU7anKEvm70zY3ahxWMKAKMd12rzGw0Cwtj7QqcifViyJzC1SV8sA==
88 символов.Расшифровываю на сервере:
>±EњкљЮЌµOТRoќ@кcљВ6МЮ˜s‰iKBЉьхsЏДБoШwџ$% с ¶ »ZЪyґg#MХАФЈ/~ѓ9џЪIНўїѓіФуЄb:м 8-(Пробую на сервер зашифровать исходную строку:
EcЊ#5Шя‰ШT¶‚чП№ќSq†-яУ!7ZњчмZМЇѕ·oXд>Жз+ў )№eС8@e5@kд - 64 символа.
Получается вот так :((( Что делать?
>Ок. Использую ECB.
>Исходная строка:
>11111111&auth=a4445c73667f047b8147b9a3ef5993c5aa4&action=check
>Шифруем и отправляем:
>/c2OEyHm7tAKmJeMjR9UrVhLLti4xS62cYU7anKEvm70zY3ahxWMKAKMd12rzGw0Cwtj7QqcifViyJzC1SV8sA==Ух ты. Оказалось base64 :)