WEB开发网
开发学院软件开发VC 使用Visual C++创建Crypto加/解密组件 阅读

使用Visual C++创建Crypto加/解密组件

 2008-11-13 19:30:27 来源:WEB开发网   
核心提示: 实现加密方法需要包括 CryptoAPI 库,在 Crypto.cpp 头加一句: #include <wincrypt.h>现在来定义我们需要的各种变量,使用Visual C++创建Crypto加/解密组件(2),STDMETHODIMP CCrypto::Encrypt(B

实现加密方法

需要包括 CryptoAPI 库,在 Crypto.cpp 头加一句: #include <wincrypt.h>

现在来定义我们需要的各种变量。

STDMETHODIMP CCrypto::Encrypt(BSTR bstrPlainText,
  BSTR bstrPassword,
  VARIANT *vCipherText)
  {
  BYTE *pbData;
  BYTE *pbPassword;
  SAFEARRAY* psa;
  HCRYPTPROV hProv = 0;
  HCRYPTHASH hHash = 0;
  HCRYPTKEY hKey = 0;
  DWORD dwCryptDataLen = 0;
  DWORD dwDataLen = 0;
  DWORD dwError = 0;
  char buffer[200];
  USES_CONVERSION;

由于许多CryptoAPI 调用要用注册表,所以需要执行一句RevertToSelf(). RevertToSelf();

下一步,我们需要将输入变量转化为我们能用的格式。

dwDataLen = SysStringLen(bstrPlainText);
  pbData = (BYTE*)OLE2A(bstrPlainText);
  pbPassword = (BYTE*)OLE2A(bstrPassword);

然后,用CryptAcquireContext function取得省缺 Crypto provider的句柄。

// Get handle to the default provider.
  if (! CryptAcquireContext(&hProv,
  "aspZoneCryptoComponent", MS_DEF_PROV,
  PROV_RSA_FULL, CRYPT_MACHINE_KEYSET))
  {
  if (! CryptAcquireContext(&hProv,
  "aspZoneCryptoComponent", MS_DEF_PROV,
  PROV_RSA_FULL, (CRYPT_NEWKEYSET |
  CRYPT_MACHINE_KEYSET)))
  {
  dwError = GetLastError();
  sprintf(buffer, "Error %x during CryptAcquireContext",
  dwError);
  return Error(buffer);
  }
  }

上一页  1 2 3 4 5  下一页

Tags:使用 Visual 创建

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接