2016-03-02 33 views
-3

我想禁用在Wincrypt API中加密的加密。
請給我點建議,如何做到這一點,一般sugestions也歡迎
下面是從EncryptedMessage.cpp代碼示例:如何禁用由Wincrypt API完成的加密

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

「...禁用在Wincrypt API中加密的加密。」 - 你是否說要解密*使用Wincrypt API加密的內容?你的措辭並沒有幫助你的問題的清晰。 – WhozCraig

+1

已標記:不明 –

+0

@WhoizCraig:是多數民衆贊成在什麼我想說 – ojas

回答

0

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

從另一個類下面剪斷有用的代碼

如果你想解密加密的信息,你應該使用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作爲加密方法用於解密加密消息的人。

相關問題