Функции CryptVerifyMessageSignature и CryptDecryptMessage позволяют мне проверить правильность сигнатуры S/MIME (или дешифровать зашифрованные данные в CryptDecryptMessage), а также вернуть сертификат, который использовался для подписания (или шифрования). Однако нет информации о том, какие алгоритмы были фактически использованы для подписи и шифрования. Как я могу получить эту информацию?Как определить алгоритм хеширования и шифрования сообщения S/MIME с помощью Win32 CryptoAPI?
Я использую C#, но любые примеры C/C++ или подсказки также приветствуются.
Edit: проверки подписи фрагмент кода (весь код очень большой, чтобы включить его здесь) предоставляется по запросу
IntPtr pbDetachedSignBlob = IntPtr.Zero;
uint cbDetachedSignBlob = (uint)signatureBytes.Length;
IntPtr pbContent = IntPtr.Zero;
uint cbContent = (uint)data.Length;
pbDetachedSignBlob = Marshal.AllocHGlobal((int)cbDetachedSignBlob);
Marshal.Copy(signatureBytes, 0, pbDetachedSignBlob, (int)cbDetachedSignBlob);
pbContent = Marshal.AllocHGlobal((int)cbContent);
Marshal.Copy(data, 0, pbContent, (int)cbContent);
IntPtr[] messageArray = { pbContent };
uint[] messageSizeArray = { cbContent };
GCHandle messageArrayHandle = GCHandle.Alloc(messageArray, GCHandleType.Pinned);
IntPtr messageArrayPtr = (IntPtr)messageArrayHandle.AddrOfPinnedObject();
int ret = CryptoApiFuncs.MessageFuncs.CryptVerifyDetachedMessageSignature(pVerifyPara, 0, pbDetachedSignBlob, cbDetachedSignBlob, 1, messageArrayPtr, ref messageSizeArray[0], ref pSignerCert);
может вы делитесь код, который вы используете для? –
@CiroCorvino Я добавил код, хотя я не уверен, как это помогает. У меня нет проблем с этим кодом, он работает нормально. Это просто другое дело. – Alex