我想禁用在 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;
}