-3

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

1 に答える 1

0

暗号化されたメッセージを復号化したい場合は、CryptDecrypt関数を使用する必要があります。

MSDN ドキュメントを参照してください: 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

コードに基づいてSessionKey、Encrypt メソッドで使用したものと同じものを使用して、暗号化されたメッセージを復号化する必要があります。

于 2016-03-07T22:01:58.963 に答える