Стоит задача обмениваться зашифрованными сообщениями с использованием сертификатов между приложением в Windows и сайтом на php, который использует openssl.
Столкнулся с проблемой выдирания из структур, создаваемых Crypto API "чистых" зашифрованных данных, т.к. php (а точнее openssl) вроде не умеет работать напрямую с этими структурами.
Например,
1. при использовании CryptExportKey(SessionKey, Key,SIMPLEBLOB,0,nil, @BufLen) получаю 140 байт и где в них мои 128, которые нормально скушает openssl_private_decrypt($crypttext,$newsource,$res) в php?
2. используя симпл функцию CryptEncryptMessage получаю цифровой конверт. Где можно прочитать его побайтную структуру? Сравнивая разные файлы, полученные шифрованием этой функцией я сумел догадаться где там мои 128 байт и расшифровать используя php, но результат - 16 байт, видимо - сессионный ключ, а сами данные идут в конце, но перед ними идут еще какие-то байты, чье назначение я не знаю. Не знаю я и каким алгоритмом шифруется сообщение при помощи сессионного ключа и используется ли salt, и если да, то где эти 11 байт хранятся? Вообще, какому стандарту соответсвует то, что получается на выходе CryptEncryptMessage? Как его разделить на составляющие для того, чтобы на сервере можно было это расшифровать с использованием базовых функций openssl & mcrypt в php?
Если кто-то сталкивался с такой задачей, помогите в алгоритме. Какие функции лучше использовать в какой последовательности для того чтобы получить сообщение, которое я смогу спокойно расшифровать в php? Честно говоря, у меня уже каша в голове от всех этих PEM, DER, CER, CRT, ASN, PKCS#7,12,8,10,1... Чувствую что хожу вокруг да около, но никак не могу найти решение.