Я хочу отключить шифрование, которое зашифровано в Wincrypt API.
Пожалуйста, дайте мне предложения, как это сделать, также приветствуются общие предложения
Ниже приведены примеры кода из EncryptedMessage.cpp:
EncryptedMessage Encrypt( TextMessage& Msg, const KeyBlob& RecipientExchangeKeyBlob )
throw( CCryptoEngine::Exception )
{
CryptProvider CryptProvider = GetCryptoProvider();
CryptKey SessionKey = CreateSessionKey( CryptProvider );
CryptKey RecipientExchangeKey = ImportExchangeKey( CryptProvider,
RecipientExchangeKeyBlob );
KeyBlob SessionKeyBlob = CreateSessionKeyBlob( SessionKey, RecipientExchangeKey );
if( ! CryptEncrypt( SessionKey, 0, TRUE, 0,
Msg.Text(), &Msg.Size(), Msg.Capacity() ) )
throw CCryptoEngine::Exception( ResourceString( IDS_CREN_MSG_ENC_FAILED ) +
GetErrorMessageFromCode( GetLastError() ) );
KeyBlob SignatureBlob; //Empty signature
return EncryptedMessage( SessionKeyBlob, Msg, SignatureBlob );
}
Полезный код, снятый с другого класса Ниже:
CCryptoEngine::CryptProvider CCryptoEngine::
GetCryptoProvider()
throw( CCryptoEngine::Exception )
{
if( ! CryptProviderAllocator::IsAllocated( m_RSACryptProvider ) )
{
if( ! CryptAcquireContext( &m_RSACryptProvider, _T("CollabWorx SIM Client"),
MS_ENHANCED_PROV, PROV_RSA_FULL, 0 ) )
if( ! CryptAcquireContext( &m_RSACryptProvider, _T("CollabWorx SIM Client"),
MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET ) )
if( ! CryptAcquireContext( &m_RSACryptProvider, NULL, MS_ENHANCED_PROV,
PROV_RSA_FULL, CRYPT_NEWKEYSET | CRYPT_VERIFYCONTEXT ) )
throw CCryptoEngine::Exception(
"Your system may lack the required security capabilities.\n""Please make sure that Microsoft High Encryption Pack (128-bit strength) ""is installed in your system.\n\nInformation for the support:\n"+ GetErrorMessageFromCode( GetLastError() ) );
g_RSACryptProvider = m_RSACryptProvider;
}
return m_RSACryptProvider;
}
Если вы хотите расшифровать зашифрованное сообщение, вы должны использовать CryptDecrypt
функция.
Смотрите документ MSDN:
https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&л = EN-US&K = K (Wincrypt% 2FCryptDecrypt); к (CryptDecrypt); к (DevLang-С% 2B% 2B); к (TargetOS-Windows)&е = верно
Исходя из вашего кода, вы должны использовать тот же SessionKey
как тот, который используется в методе Encrypt для расшифровки зашифрованного сообщения.
Других решений пока нет …