CryptAcquireContext函数返回“密钥集不存在”错误的解决代码
2009-03-23 16:25
567 查看
#include <WinCrypt.h> #define KEYLENGTH 0x00800000 BOOL MyEncryptData(PBYTE pbyBuff, int iLen, char *szPasswd) { HCRYPTPROV hCryptProv; HCRYPTKEY hKey; HCRYPTHASH hHash; BOOL bRet = FALSE; DWORD dwLen, dwTmp = *((DWORD*)pbyBuff); PBYTE p = pbyBuff; DWORD dwErr = GetLastError(); if(!CryptAcquireContext(&hCryptProv, NULL, MS_DEFAULT_CSP, PROV_RSA_FULL, CRYPT_DELETEKEYSET)) { dwErr = GetLastError(); printf("Err: CryptAcquireContext(CRYPT_DELETEKEYSET),dwErr = 0x%08X/n", dwErr); } else { printf("CryptAcquireContext(CRYPT_DELETEKEYSET) OK,hCryptProv=0x%08X!/n", hCryptProv); CryptReleaseContext( hCryptProv, 0); } if(!CryptAcquireContext(&hCryptProv, NULL, MS_DEFAULT_CSP, PROV_RSA_FULL, CRYPT_NEWKEYSET)) { dwErr = GetLastError(); printf("Err: CryptAcquireContext(CRYPT_NEWKEYSET),dwErr = 0x%08X/n", dwErr); } else { printf("CryptAcquireContext(CRYPT_NEWKEYSET) OK,hCryptProv=0x%08X!/n", hCryptProv); CryptReleaseContext( hCryptProv, 0); } printf("/nBegin:/n"); dwLen = iLen; bRet = CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0); if( !bRet ) { printf("%08x Error CryptAcquireContext()!/n", ::GetLastError() ); return bRet; } bRet = CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash); if( !bRet ) { printf("%08x Error CryptCreateHash()!/n", ::GetLastError() ); return bRet; } bRet = CryptHashData(hHash, (BYTE *)szPasswd, strlen(szPasswd), 0); if( !bRet ) { printf("%08x Error CryptHashData()!/n", ::GetLastError() ); return bRet; } bRet = CryptDeriveKey(hCryptProv, CALG_RC4, hHash, KEYLENGTH, &hKey); if( !bRet ) { printf("%08x Error CryptDeriveKey()!/n", ::GetLastError() ); return bRet; } bRet = CryptEncrypt(hKey, 0, 1, 0, p, &dwLen, dwLen); if( !bRet ) { printf("%08x Error CryptEncrypt()!/n", ::GetLastError() ); return bRet; } CryptDestroyKey(hKey); CryptDestroyHash(hHash); CryptReleaseContext( hCryptProv, 0); return bRet; }
相关文章推荐
- 解决c/c++函数返回局部变量char*的错误
- C/C++错误分析errno,perror,strerror和GetLastError()函数返回的错误代码的意义
- 已安全化的ActiveX控件卸载时出现"DllUnregisterServer函数出错,错误代码:0x80070002"问题解决
- 未能返回新代码元素错误的解决
- jsp代码页面报:javax.servlet.jsp.PageContext cannot be resolved to a type错误的解决办法
- RegQueryValueEx函数返回234错误解决方法
- VB中的RasEnumConnections函数返回632错误解决方法
- 转帖:“0x80090016错误,密钥集不存在”的解决
- 未能返回新代码元素错误的解决
- RegQueryValueEx函数返回234错误解决方法
- windows connect()返回错误的代码10061的解决办法
- OCIEnvCreate 失败, 返回代码为-1,但错误消息文本不可用 解决办法
- ProGuard的返回错误代码1。异常的解决方法
- RegQueryValueEx函数返回234错误解决方法
- linux下system函数错误返回-1,错误原因NO child processes的解决办法
- 完成端口GetQueuedCompletionStatus()返回错误,怎样获得真正的错误代码,错误返回64解决办法
- curl 函数执行了之后返回false解决,打印错误信息返回PHP的Curl出现:curl call error(77): Problem with the SSL CA cert (path? ac
- VB中的RasEnumConnections函数返回632错误解决方法
- Win8系统提示无效的产品密钥错误代码0x80070424的故障分析及解决方法
- 函数返回数组代码(c错误语言)