Добрый день.
Пытаемся сформировать зашифрованное сообщение для ФСС, используя CAdESCOM.CPEnvelopedData.
Алгоритм процесса такой же, как и в
этом сообщении:
1. К исходному сообщению добавляем паддинг
2. Создаем объект CAdESCOM.CPEnvelopedData, передаем ему сообщение и сертификат ФСС, вызываем Encrypt, получаем PKCS#7 EnvelopedData
3. Из PKCS#7 вынимаем структуру с ключами - это пойдет в EncryptedData/KeyInfo/EncryptedKey/CipherData/CipherValue
4. Из PKCS#7 вынимаем зашифрованное сообщение и IV. Подставляем IV префиксом к зашифрованному сообщению - это пойдет в EncryptedData/CipherData/CipherValue
5. Формируем XML, подставляем данные полученные выше, наш сертификат.
Запрашиваем тестовый сервис ФСС, он отвечает:
Цитата:...Error in execution of data encrypting/decrypting operation. class org.apache.xml.security.encryption.XMLEncryptionException
Ранее в процессе экспериментов, где явно информация о секретном ключе была некорректной, возвращалось:
Цитата:...Не удалось расшифровать сообщение. Возможно сообщение зашифровано на ключе отличном от ключа уполномоченного лица ФСС. Проверьте правильность и актуальность ключа уполномоченного лица ФСС.
Из чего делаю предположение, что в итоге с ключами все стало хорошо, проблема в зашифрованном сообщении.
Глядя на
ответ: "Ключ получается нормально, но ХML ожидает шифрование в CBC. А CryptEncryptMessage шифрует CFB...", и дальнейшее обсуждение, возникает опасение, что в нашем случае имеет место та же самая ситуация. Т.е., перефразируя: CPEnvelopedData.Encrypt шифрует CFB, а ожидается CBC.
Так ли это? CPEnvelopedData.Encrypt использует режим CFB, а ФСС ожидает CBC?