Windows平台下利用CSP來實現加密保護
來源:互聯網
上載者:User
CSP是Cryptographic Service Provider的簡寫,是微軟專為 Windows系列作業系統制定的底層加密介面,用於管理硬體或軟體形式的加密裝置,實現資料加密、解密,數位簽章、驗證和資料摘要 (即 HASH)等。 本例實現了幾方面的操作 1.對容器的操作 包括建立,開啟,關閉,銷毀容器. Provider可以對應於一個硬體UKey或者軟體虛擬容器,微軟提供了幾個預設的Provider,每個Provider裡面都可以包含若干容器(Container). 微軟提供的Provider: PROV_RSA_FULL PROV_RSA_SIG PROV_DSS PROV_DSS_DH PROV_FORTEZZA PROV_MS_EXCHANGE PROV_RSA_SCHANNEL PROV_SSL PROV_EC_ECDSA_SIG PROV_EC_ECNRA_SIG PROV_EC_ECDSA_FULL PROV_EC_ECNRA_FULL PROV_SPYRUS_LYNKS PROV_RNG PROV_INTEL_SEC 2.產生隨機數 3.在容器中產生密鑰,包括RSA加密金鑰對,RSA簽名金鑰組. 4.RSA加密非對稱式加密用於加密少量,對安全性要求比較高的資料. 5.簽名,驗簽,RSA公開金鑰的匯出(可以用於驗證簽名).用於驗證身份. 6.HASH,HMAC.用於驗證資料完整性 7.對稱加解密.加密資料,速度快. 8.保護本機資料:不需要CSP控制代碼,和容器無關,產生只能在本機才能解密的資料.可以防止本機資料被Copy. 9 這裡有一種方法比較有意思 有一個這樣的需求,我會調用一些函數,然後希望每次調用後彈出彈出資訊告訴我此次調用的函數名字,調用結果 a)定義一個函數,負責彈出資訊,它輸入參數為函數名字和函數的返回結果 VOID CCSPDlg::PopupMessage(LPCTSTR lpFunction, BOOL bResult, BOOL bAddLastErrorMsg/*= TRUE*/) { CString strInfo; TCHAR szErrMsg[MAX_PATH] = {0}; if(bAddLastErrorMsg) SSOSGetCodeDesc(::GetLastError(), szErrMsg, SS_DIMOF(szErrMsg), NULL); if(bResult) { strInfo.Format(_T("Execute %s Success.\r\n %s"),lpFunction, szErrMsg); }else { strInfo.Format(_T("Execute %s Failed.\r\n %s"),lpFunction, szErrMsg); } AfxMessageBox(strInfo); } b)定義一個宏 #define CALL_FUNC_OF_RLT_BY_BOOL(F) PopupMessage(TEXT(#F), F) c)應用情境 CALL_FUNC_OF_RLT_BY_BOOL( (m_hCryptProv = SSCSPCreateContainer(NULL, NULL)) != NULL); CALL_FUNC_OF_RLT_BY_BOOL(SSCSPCloseContainer(m_hCryptProv)); SOURCE CODE : http://download.csdn.net/detail/patdz/4280531