PKCS12 подписывает строку
У меня есть код, написанный на C#, чтобы подписать и обернуть строку для отправки в веб-службу, этот код получает сертификат в формате .pfx и пароль сертификата.
string myString = "Hello World"; X509Certificate2 cert = new X509Certificate2(@"<MY PFX FILE>", "<MY PASS>"); CmsSigner signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, cert); signer.DigestAlgorithm = new Oid("<MY OID>"); ContentInfo content = new ContentInfo(new Oid("<MY OID>"), new System.Text.UTF8Encoding().GetBytes(myString)); SignedCms signedCms = new SignedCms(content, false); signedCms.ComputeSignature(signer, false); var asig = signedCms.Encode();
Теперь мне нужно написать код, который делает точно то же самое, но в C, выполнив несколько поисков в google, я нашел несколько библиотек. вот и работаю с этим типом информации, и в этом поиске я нашел OpenSSL.
Но я не нашел, как я мог бы подписать и обернуть сообщение, точно так же, как я делаю это в C#. Заранее спасибо, если кто-нибудь может мне помочь, как я могу сделать то же самое, что я делаю в C# в C.
Что я уже пробовал:
Я провел несколько тестов с Либ " Чилкат", C RSA подписывает с помощью закрытого ключа от .pfx/. p12 до подписи Base64[^], когда я зашифровал одну и ту же информацию с помощью моей программы на C# и с помощью этой программы на C++, выход был совершенно другим, и я не знал, как использовать алгоритм дайджеста OID...
С OpenSSL я не нашел, как я могу подписать сообщение с помощью сертификации PKCS#7.
Garth J Lancaster
Я не завидую вашей задаче - есть так много параметров/переменных, которые должны быть "просто так" с каждой стороны - это достаточно плохо, используя "общую библиотеку", но только c# vs OpenSSL (например)
Я сделал "похожее", но потом обманул - нашел библиотеку на c++, написал высокоуровневую оболочку для требуемых от нее функционалов на c++, экспортировал эту оболочку как dll, а затем использовал слой взаимодействия P/Invoke из c# - это означало, что я использую яблоки и яблоки с каждой стороны.
Этот комментарий, скорее всего, вам совсем не поможет - и я повернул свое решение "наоборот", основывая его на стороне c++, а не на c# .. Я не сомневаюсь, что это выполнимо в OpenSSL и C#, но, скорее всего, это потребует большого количества исследований и экспериментов