c++windowsencryptionwincrypt

How to disable encryption done by Wincrypt API


I want to disable the encryption which is encrypted in Wincrypt API.
Please give me suggestions, how to do that, general sugestions are also welcomed
Below is the Code Samples from 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 );
  }

Useful Code Snipped from another class Below:

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;
}

Solution

  • If you want to decrypt the encrypted message, you should use the CryptDecrypt function.

    See MSDN document: https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(Wincrypt%2FCryptDecrypt);k(CryptDecrypt);k(DevLang-C%2B%2B);k(TargetOS-Windows)&rd=true

    Based on your code, you should use the same SessionKey as the one used in the Encrypt method to decrypt the encrypted message.