?
Sorry ich ich meinte natürlich encrypt. ( Der klassische copy/paste Fehler... :-))
CString CCrypt::EncryptString(CString _sSource, CString _sPassword/*=""*/)
{
//--------------------------------------------------------------------
// Declare and initialize local variables.
if(strlen(_sPassword)==0)
_sPassword = "geheim";
BYTE *cPwd = (BYTE*)(LPCSTR)_sPassword;
CString cryptString = 0;
HCRYPTPROV hCryptProv = 0;
HCRYPTKEY hKey = 0;
HCRYPTHASH hHash = 0;
DWORD err = 0;
char pbBuffer[1000] = {0};
DWORD dwCount = (DWORD)strlen(_sSource);
DWORD dwBufLen = 1000;
if(strlen(_sSource)!=0)
{
strcpy(pbBuffer, _sSource);
//--------------------------------------------------------------------
// Get a handle to the default provider.
if(!CryptAcquireContext(&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0))
{
//if(!CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET))
//{
err = GetLastError();
MessageBox(NULL, "Error during CryptAcquireContext!", "error", MB_OK);
//}
}
//--------------------------------------------------------------------
// Create a hash object.
if(!CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash))
{
err = GetLastError();
MessageBox(NULL, "Error during CryptCreateHash!", "error", MB_OK);
}
//--------------------------------------------------------------------
// Hash in the password data.
if(!CryptHashData(hHash, cPwd, (DWORD)strlen((char*)cPwd), 0))
{
err = GetLastError();
MessageBox(NULL, "Error during CryptHashData!", "error", MB_OK);
}
//--------------------------------------------------------------------
// Derive a session key from the hash object.
if(!CryptDeriveKey(hCryptProv, CALG_3DES, hHash, CRYPT_EXPORTABLE, &hKey))
{
err = GetLastError();
MessageBox(NULL, "Error during CryptDeriveKey!", "error", MB_OK);
}
//--------------------------------------------------------------------
// Destroy the hash object.
if(!(CryptDestroyHash(hHash)))
MessageBox(NULL, "Error during CryptDestroyHash", "error", MB_OK);
hHash = 0;
//--------------------------------------------------------------------
// Encrypt data.
if(!CryptEncrypt(hKey, 0, TRUE, 0, (BYTE*)pbBuffer, &dwCount, dwBufLen))
{
err = GetLastError();
MessageBox(NULL, "Error during CryptEncrypt!", "error", MB_OK);
}
//--------------------------------------------------------------------
// Destroy session key.
if(hKey)
{
if(!(CryptDestroyKey(hKey)))
MessageBox(NULL, "Error during CryptDestroyKey", "error", MB_OK);
}
//--------------------------------------------------------------------
// Release provider handle.
if(hCryptProv)
{
if(!(CryptReleaseContext(hCryptProv, 0)))
MessageBox(NULL, "Error during CryptReleaseContext", "error", MB_OK);
}
char test[1000] = {0};
int tmpCount = 1000;
Base64Encode((BYTE*)pbBuffer, dwCount, test, &tmpCount);
cryptString = test;
}
return cryptString;
}