cryptoapi и openssl

Я пытаюсь зашифровать и подписать файл с помощью cryptoapi с некоторыми сертификатами X.509. Я хочу проверить и расшифровать этот файл с помощью openssl.

На окнах я думаю, что мне нужно использовать CryptSignAndEncryptMessage функция для шифрования и подписи данных. я использовал этот пример из MSDN создать подписанное и зашифрованное сообщение.

Как я могу расшифровать / проверить этот файл с помощью openssl? Я удалил первые 4 байта из сообщения, поскольку оно содержало длину сообщения (из двоичного объекта Windows).
Когда я звоню openssl -asn1parse я получил какой-то вывод это указывает на то, что он может быть разобран openssl.

При попытке проверить подпись с openssl я получаю сообщение об ошибке:

openssl rsautl -verify -inkey AlonsoCert.pem -keyform pem -certin -in sandvout-without-4byte.txt
RSA operation error
3073579208:error:0406706C:rsa routines:RSA_EAY_PUBLIC_DECRYPT:data greater than mod len:rsa_eay.c:680:

2

Решение

В сообщении CryptSignAndEncrypt, похоже, используется шифр RC4 с пустым полем параметров ASN.1 и, глядя на источники OpenSSL, дроссели openssl пытаются сгенерировать IV (что не требуется для RC4).

Попробуйте использовать другой шифр (например, AES) в CryptAndSignMessage.
Во всяком случае, RC4 очень старый, небезопасный и устаревший.

1

Другие решения

Ваш ASN.1 дамп информации показывает, что вы создали вывод CMS PKCS # 7 из своего кода CryptoAPI. В результате вы не можете использовать основные методы расшифровки и проверки OpenSSL.

Вместо этого используйте cms Режим:

openssl cms -decrypt -inform DER -in sandvout-without-4byte.txt
-out decrypted.bin -recip testkey.pfx

(Примечание: я не использовал этот режим раньше, поэтому я считать синтаксис, который я предложил, правильный. В любом случае, это должно быть шагом в правильном направлении, который решает это.)

1

Попробуйте использовать openssl smime проверить и / или расшифровать. Синтаксис довольно прост, но вы можете найти информацию здесь: http://www.openssl.org/docs/apps/smime.html

1