您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ CryptDestroyKey函数代码示例

51自学网 2021-06-01 20:15:36
  C++
这篇教程C++ CryptDestroyKey函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中CryptDestroyKey函数的典型用法代码示例。如果您正苦于以下问题:C++ CryptDestroyKey函数的具体用法?C++ CryptDestroyKey怎么用?C++ CryptDestroyKey使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了CryptDestroyKey函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: goodB2G

/* goodB2G() - use badsource and goodsink by reversing the blocks on the second goto statement */static void goodB2G(){    wchar_t * data;    wchar_t dataBuffer[100] = L"";    data = dataBuffer;    goto source;source:    {        FILE *pFile;        pFile = fopen("passwords.txt", "r");        if (pFile != NULL)        {            /* POTENTIAL FLAW: Read the password from a file */            if (fgetws(data, 100, pFile) == NULL)            {                data[0] = L'/0';            }            fclose(pFile);        }        else        {            data[0] = L'/0';        }    }    goto sink;sink:    {        HANDLE pHandle;        wchar_t * username = L"User";        wchar_t * domain = L"Domain";        char hashData[100] = HASH_INPUT;        HCRYPTPROV hCryptProv = 0;        HCRYPTHASH hHash = 0;        HCRYPTKEY hKey = 0;        do        {            BYTE payload[(100 - 1) * sizeof(wchar_t)]; /* same size as data except for NUL terminator */            DWORD payloadBytes;            /* Hex-decode the input string into raw bytes */            payloadBytes = decodeHexWChars(payload, sizeof(payload), data);            /* Wipe the hex string, to prevent it from being given to LogonUserW if             * any of the crypto calls fail. */            SecureZeroMemory(data, 100 * sizeof(wchar_t));            /* Aquire a Context */            if(!CryptAcquireContext(&hCryptProv, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, 0))            {                break;            }            /* Create hash handle */            if(!CryptCreateHash(hCryptProv, CALG_SHA_256, 0, 0, &hHash))            {                break;            }            /* Hash the input string */            if(!CryptHashData(hHash, (BYTE*)hashData, strlen(hashData), 0))            {                break;            }            /* Derive an AES key from the hash */            if(!CryptDeriveKey(hCryptProv, CALG_AES_256, hHash, 0, &hKey))            {                break;            }            if(!CryptDecrypt(hKey, 0, 1, 0, payload, &payloadBytes))            {                break;            }            /* Copy back into data and NUL-terminate */            memcpy(data, payload, payloadBytes);            data[payloadBytes / sizeof(wchar_t)] = L'/0';        }        while (0);        if (hKey)        {            CryptDestroyKey(hKey);        }        if (hHash)        {            CryptDestroyHash(hHash);        }        if (hCryptProv)        {            CryptReleaseContext(hCryptProv, 0);        }        /* FIX: Decrypt the password before using it for authentication  */        if (LogonUserW(                    username,                    domain,                    data,                    LOGON32_LOGON_NETWORK,                    LOGON32_PROVIDER_DEFAULT,                    &pHandle) != 0)        {            printLine("User logged in successfully.");            CloseHandle(pHandle);        }        else        {            printLine("Unable to login.");//.........这里部分代码省略.........
开发者ID:gpwi970725,项目名称:testJuliet2,代码行数:101,


示例2: SfcIsFileLegit

//.........这里部分代码省略.........** 8. Use result MD5 as hash value; ** 9. Verify embedded signature.** If anything from the above fail - file is not legit by ZeroAccess opinion.** If you copy ZeroAccess downloaded files without copying EA data, it cannot be verified.**/NTSTATUS SfcIsFileLegit(	_In_ LPWSTR lpFileName,	_In_ PBYTE BotKey,	_In_ DWORD BotKeySize	){	BOOL                cond = FALSE;	PVOID               pBuffer;	MD5_CTX             context;	ZA_FILEHEADER       zaHeader;	HCRYPTPROV          lh_prov = 0;	HCRYPTKEY           lh_key = 0;	HANDLE              hFile = NULL;	NTSTATUS            status = STATUS_UNSUCCESSFUL;	OBJECT_ATTRIBUTES   ObjectAttributes;	IO_STATUS_BLOCK     IoStatusBlock;	UNICODE_STRING      usFileName;	SIZE_T              memIO = 0;	if (		(lpFileName == NULL) ||		(BotKey == NULL) ||		(BotKeySize == 0)		)	{		return status;	}	RtlSecureZeroMemory(&usFileName, sizeof(usFileName));	do {		if (RtlDosPathNameToNtPathName_U(lpFileName, &usFileName, NULL, NULL) == FALSE)			break;		InitializeObjectAttributes(&ObjectAttributes, &usFileName, OBJ_CASE_INSENSITIVE, NULL, NULL);		status = NtOpenFile(&hFile, FILE_GENERIC_READ, &ObjectAttributes, &IoStatusBlock,			FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,			FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT			);		if (!NT_SUCCESS(status))			break;		RtlFreeUnicodeString(&usFileName);		RtlSecureZeroMemory(&zaHeader, sizeof(zaHeader));		if (!SfNtfsQueryFileHeaderFromEa(hFile, &zaHeader)) {			status = STATUS_EA_LIST_INCONSISTENT;			break;		}		status = STATUS_UNSUCCESSFUL;		memIO = zaHeader.Size;		pBuffer = NULL;		if (			(NT_SUCCESS(NtAllocateVirtualMemory(NtCurrentProcess(), &pBuffer, 0, &memIO, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE))) &&			(pBuffer != NULL)			)		{			if (NT_SUCCESS(NtReadFile(hFile, NULL, NULL, NULL, &IoStatusBlock, pBuffer, zaHeader.Size, NULL, NULL))) {				if (CryptAcquireContext(&lh_prov, NULL, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {					if (CryptImportKey(lh_prov, (const BYTE *)BotKey, BotKeySize, 0, 0, &lh_key)) {						RtlSecureZeroMemory(&context, sizeof(context));						MD5Init(&context);						MD5Update(&context, (UCHAR*)&zaHeader, (UINT)3 * sizeof(ULONG)); //note: ZA_FILEHEADER without signature						if (SfcVerifyFile(lh_prov, lh_key, &context, pBuffer, zaHeader.Size))							status = STATUS_SUCCESS;						CryptDestroyKey(lh_key);					}					CryptReleaseContext(lh_prov, 0);				}			}			memIO = 0;			NtFreeVirtualMemory(NtCurrentProcess(), &pBuffer, &memIO, MEM_RELEASE);		}		NtClose(hFile);		hFile = NULL;	} while (cond);	if (hFile != NULL) NtClose(hFile);	if (usFileName.Buffer != NULL) {		RtlFreeUnicodeString(&usFileName);	}	return status;}
开发者ID:hangoversec,项目名称:ZeroAccess,代码行数:101,


示例3: rsaencrypt

void rsaencrypt(unsigned char *data, int length, struct RSAKey *rsakey) {    int i;    unsigned char *pKeybuf, *pKeyin;    HCRYPTKEY hRsaKey;    PUBLICKEYSTRUC *pBlob;    RSAPUBKEY *pRPK;    unsigned char *buf;    DWORD dlen;    DWORD bufsize;    /* allocate buffer for public key blob */    if((pBlob = malloc(sizeof(PUBLICKEYSTRUC) + sizeof(RSAPUBKEY) +		       rsakey->bytes)) == NULL)	fatalbox("Out of memory");    /* allocate buffer for message encryption block */    bufsize = (length + rsakey->bytes) << 1;    if((buf = malloc(bufsize)) == NULL)	fatalbox("Out of memory");    /* construct public key blob from host public key */    pKeybuf = ((unsigned char*)pBlob) + sizeof(PUBLICKEYSTRUC) +	sizeof(RSAPUBKEY);    pKeyin = ((unsigned char*)rsakey->modulus);    /* change big endian to little endian */    for(i=0; i<rsakey->bytes; i++)	pKeybuf[i] = pKeyin[rsakey->bytes-i-1];    pBlob->bType = PUBLICKEYBLOB;    pBlob->bVersion = 0x02;    pBlob->reserved = 0;    pBlob->aiKeyAlg = CALG_RSA_KEYX;    pRPK = (RSAPUBKEY*)(((unsigned char*)pBlob) + sizeof(PUBLICKEYSTRUC));    pRPK->magic = 0x31415352; /* "RSA1" */    pRPK->bitlen = rsakey->bits;    pRPK->pubexp = rsakey->exponent;    /* import public key blob into key container */    if(CryptImportKey(hCryptProv, (void*)pBlob,		      sizeof(PUBLICKEYSTRUC)+sizeof(RSAPUBKEY)+rsakey->bytes,		      0, 0, &hRsaKey) == 0)	fatalbox("Error importing RSA key!");    /* copy message into buffer */    memcpy(buf, data, length);    dlen = length;    /* using host public key, encrypt the message */    if(CryptEncrypt(hRsaKey, 0, TRUE, 0, buf, &dlen, bufsize) == 0)	fatalbox("Error encrypting using RSA key!");    /*     * For some strange reason, Microsoft CryptEncrypt using public     * key, returns the cyphertext in backwards (little endian)     * order, so reverse it!     */    for(i = 0; i < (int)dlen; i++)	data[i] = buf[dlen - i - 1]; /* make it big endian */    CryptDestroyKey(hRsaKey);    free(buf);    free(pBlob);}
开发者ID:rdebath,项目名称:sgt,代码行数:64,


示例4: GetLastError

PCCERT_CONTEXT SslSocketCpServer::CreateOurCertificate(){	// CertCreateSelfSignCertificate(0,&SubjectName,0,0,0,0,0,0);	HRESULT hr = 0;	HCRYPTPROV hProv = NULL;	PCCERT_CONTEXT p = 0;	HCRYPTKEY hKey = 0;	CERT_NAME_BLOB sib = { 0 };	BOOL AX = 0;	// Step by step to create our own certificate	try	{		// Create the subject		char cb[1000] = { 0 };		sib.pbData = (BYTE*)cb;		sib.cbData = 1000;		wchar_t*	szSubject = L"CN=Certificate";		if (!CertStrToName(CRYPT_ASN_ENCODING, szSubject, 0, 0, sib.pbData, &sib.cbData, NULL))			throw;		// Acquire Context		wchar_t* pszKeyContainerName = L"Container";		if (!CryptAcquireContext(&hProv, pszKeyContainerName, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET | CRYPT_MACHINE_KEYSET))		{			hr = GetLastError();			if (GetLastError() == NTE_EXISTS)			{				if (!CryptAcquireContext(&hProv, pszKeyContainerName, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_MACHINE_KEYSET))				{					throw;				}			}			else				throw;		}		// Generate KeyPair		if (!CryptGenKey(hProv, AT_KEYEXCHANGE, CRYPT_EXPORTABLE, &hKey))			throw;		// Generate the certificate		CRYPT_KEY_PROV_INFO kpi = { 0 };		kpi.pwszContainerName = pszKeyContainerName;		kpi.pwszProvName = MS_DEF_PROV;		kpi.dwProvType = PROV_RSA_FULL;		kpi.dwFlags = CERT_SET_KEY_CONTEXT_PROP_ID;		kpi.dwKeySpec = AT_KEYEXCHANGE;		SYSTEMTIME et;		GetSystemTime(&et);		et.wYear += 1;		CERT_EXTENSIONS exts = { 0 };		p = CertCreateSelfSignCertificate(hProv, &sib, 0, &kpi, NULL, NULL, &et, &exts);		AX = CryptFindCertificateKeyProvInfo(p, CRYPT_FIND_MACHINE_KEYSET_FLAG, NULL);		hCS = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, CERT_STORE_CREATE_NEW_FLAG, 0);		/*AX = CertAddCertificateContextToStore(hCS,p,CERT_STORE_ADD_NEW,0);		AX = CryptFindCertificateKeyProvInfo(p,CRYPT_FIND_MACHINE_KEYSET_FLAG,NULL);*/	}	catch (...)	{	}	if (hKey)		CryptDestroyKey(hKey);	hKey = 0;	if (hProv)		CryptReleaseContext(hProv, 0);	hProv = 0;	return p;}
开发者ID:MagnusTiberius,项目名称:iocphttpd,代码行数:77,


示例5: sqlite3_rekey

// Changes the encryption key for an existing database.int sqlite3_rekey(sqlite3 *db, const unsigned char *pKey, int nKeySize){  Btree *pbt = db->aDb[0].pBt;  Pager *p = sqlite3BtreePager(pbt);  LPCRYPTBLOCK pBlock = (LPCRYPTBLOCK)sqlite3pager_get_codecarg(p);  HCRYPTKEY hKey = DeriveKey(pKey, nKeySize);  int rc = SQLITE_ERROR;  if (hKey == MAXDWORD)  {    sqlite3Error(db, rc, SQLITECRYPTERROR_PROVIDER);    return rc;  }  if (!pBlock && !hKey) return SQLITE_OK; // Wasn't encrypted to begin with  // To rekey a database, we change the writekey for the pager.  The readkey remains  // the same  if (!pBlock) // Encrypt an unencrypted database  {    pBlock = CreateCryptBlock(hKey, p, -1, NULL);    if (!pBlock)      return SQLITE_NOMEM;    pBlock->hReadKey = 0; // Original database is not encrypted    sqlite3PagerSetCodec(sqlite3BtreePager(pbt), sqlite3Codec, sqlite3CodecSizeChange, sqlite3CodecFree, pBlock);    //db->aDb[0].pAux = pBlock;    //db->aDb[0].xFreeAux = DestroyCryptBlock;  }  else // Change the writekey for an already-encrypted database  {    pBlock->hWriteKey = hKey;  }  // Start a transaction  rc = sqlite3BtreeBeginTrans(pbt, 1);  if (!rc)  {    // Rewrite all the pages in the database using the new encryption key    Pgno nPage;    Pgno nSkip = PAGER_MJ_PGNO(p);    DbPage *pPage;    Pgno n;    rc = sqlite3PagerPagecount(p, &nPage);    for(n = 1; rc == SQLITE_OK && n <= nPage; n ++)    {      if (n == nSkip) continue;      rc = sqlite3PagerGet(p, n, &pPage);      if(!rc)      {        rc = sqlite3PagerWrite(pPage);        sqlite3PagerUnref(pPage);      }    }  }  // If we succeeded, try and commit the transaction  if (!rc)  {    rc = sqlite3BtreeCommit(pbt);  }  // If we failed, rollback  if (rc)  {    sqlite3BtreeRollback(pbt);  }  // If we succeeded, destroy any previous read key this database used  // and make the readkey equal to the writekey  if (!rc)  {    if (pBlock->hReadKey)    {      CryptDestroyKey(pBlock->hReadKey);    }    pBlock->hReadKey = pBlock->hWriteKey;  }  // We failed.  Destroy the new writekey (if there was one) and revert it back to  // the original readkey  else  {    if (pBlock->hWriteKey)    {      CryptDestroyKey(pBlock->hWriteKey);    }    pBlock->hWriteKey = pBlock->hReadKey;  }  // If the readkey and writekey are both empty, there's no need for a codec on this  // pager anymore.  Destroy the crypt block and remove the codec from the pager.  if (!pBlock->hReadKey && !pBlock->hWriteKey)  {    sqlite3PagerSetCodec(p, NULL, NULL, NULL, NULL);  }//.........这里部分代码省略.........
开发者ID:AugustoAngeletti,项目名称:blockspaces,代码行数:101,


示例6: goodB2G2Sink

/* goodB2G2() - use badsource and goodsink by reversing the blocks in the if in the sink function */static void goodB2G2Sink(wchar_t * password){    if(goodB2G2Static)    {        {            HCRYPTPROV hCryptProv = 0;            HCRYPTHASH hHash = 0;            HCRYPTKEY hKey = 0;            char hashData[100] = HASH_INPUT;            HANDLE pHandle;            wchar_t * username = L"User";            wchar_t * domain = L"Domain";            do            {                BYTE payload[(100 - 1) * sizeof(wchar_t)]; /* same size as password except for NUL terminator */                DWORD payloadBytes;                /* Hex-decode the input string into raw bytes */                payloadBytes = decodeHexWChars(payload, sizeof(payload), password);                /* Wipe the hex string, to prevent it from being given to LogonUserW if                 * any of the crypto calls fail. */                SecureZeroMemory(password, 100 * sizeof(wchar_t));                /* Aquire a Context */                if(!CryptAcquireContext(&hCryptProv, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, 0))                {                    break;                }                /* Create hash handle */                if(!CryptCreateHash(hCryptProv, CALG_SHA_256, 0, 0, &hHash))                {                    break;                }                /* Hash the input string */                if(!CryptHashData(hHash, (BYTE*)hashData, strlen(hashData), 0))                {                    break;                }                /* Derive an AES key from the hash */                if(!CryptDeriveKey(hCryptProv, CALG_AES_256, hHash, 0, &hKey))                {                    break;                }                /* FIX: Decrypt the password */                if(!CryptDecrypt(hKey, 0, 1, 0, payload, &payloadBytes))                {                    break;                }                /* Copy back into password and NUL-terminate */                memcpy(password, payload, payloadBytes);                password[payloadBytes / sizeof(wchar_t)] = L'/0';            }            while (0);            if (hKey)            {                CryptDestroyKey(hKey);            }            if (hHash)            {                CryptDestroyHash(hHash);            }            if (hCryptProv)            {                CryptReleaseContext(hCryptProv, 0);            }            /* Use the password in LogonUser() to establish that it is "sensitive" */            if (LogonUserW(                        username,                        domain,                        password,                        LOGON32_LOGON_NETWORK,                        LOGON32_PROVIDER_DEFAULT,                        &pHandle) != 0)            {                printLine("User logged in successfully.");                CloseHandle(pHandle);            }            else            {                printLine("Unable to login.");            }        }    }}
开发者ID:gpwi970725,项目名称:testJuliet2,代码行数:83,


示例7: decrypt_block

/** * Takes a block of data encrypted with a symmetric cypher and decrypts it. * The output buffer must be at least the size of source data. */int decrypt_block(int keytype, const unsigned char *IV,                  const unsigned char *key,                  const unsigned char *aad, unsigned int aadlen,                  unsigned char *src, unsigned int srclen,                  unsigned char *dest, unsigned int *destlen){    // TODO: right now we reimport the key each time.  Test to see if this    // is quick enough or if we need to cache an imported key.    HCRYPTKEY hckey;    char keyblob[BLOBLEN];    BLOBHEADER *bheader;    DWORD *keysize;    BYTE *keydata;    int bloblen, keylen, ivlen, rval;    ALG_ID alg;    DWORD mode, _destlen;    get_key_info(keytype, &keylen, &ivlen);    alg = get_cipher(keytype);    if (alg == 0) {        log0(0, 0, 0, "Invalid keytype");        return 0;    }    bheader = (BLOBHEADER *)keyblob;    keysize = (DWORD *)(keyblob + sizeof(BLOBHEADER));    keydata = (BYTE *)((char *)keysize + sizeof(DWORD));    memset(keyblob, 0, sizeof(keyblob));    bheader->bType = PLAINTEXTKEYBLOB;    bheader->bVersion = CUR_BLOB_VERSION;    bheader->aiKeyAlg = alg;    *keysize = keylen;    memcpy(keydata, key, keylen);    bloblen = sizeof(BLOBHEADER) + sizeof(DWORD) + keylen;    if (!CryptImportKey(base_prov, keyblob, bloblen, 0, 0, &hckey)) {        mserror("CryptImportKey failed");        return 0;    }    mode = CRYPT_MODE_CBC;    if (!CryptSetKeyParam(hckey, KP_MODE, (BYTE *)&mode, 0)) {        mserror("CryptSetKeyParam failed on KP_MODE");        rval = 0;        goto end;    }    if (!CryptSetKeyParam(hckey, KP_IV, IV, 0)) {        mserror("CryptSetKeyParam failed on KP_IV");        rval = 0;        goto end;    }    memcpy(dest, src, srclen);    _destlen = srclen;    if (!CryptDecrypt(hckey, 0, 1, 0, dest, &_destlen)) {        mserror("CryptDecrypt failed");        rval = 0;        goto end;    }    *destlen = _destlen;    rval = 1;end:    if (!CryptDestroyKey(hckey)) {        mserror("CryptDestroyKey failed");    }    return rval;}
开发者ID:PumpkinSpace,项目名称:uftp,代码行数:72,


示例8: ReadPasswordFromRegistry

// The following function reads the password from the registry and decrypts it. // Note that the szPassword parameter should be already allocated with a minimum // size of 32 characters (64 bytes if using UNICODE). // The account buffer must be able to hold 100 characters.BOOL ReadPasswordFromRegistry(TCHAR *szAccount, TCHAR *szPassword) {	int nError;	BOOL bResult = TRUE;		TCHAR szKey[256];	HKEY hRegKey = NULL;	_tcscpy(szKey, MPICHKEY);		if (RegOpenKeyEx(HKEY_CURRENT_USER, szKey, 0, KEY_QUERY_VALUE, &hRegKey) == ERROR_SUCCESS) 	{		DWORD dwLength = 100;		*szAccount = TEXT('/0');		if (RegQueryValueEx(				hRegKey, 				_T("Account"), NULL, 				NULL, 				(BYTE*)szAccount, 				&dwLength)!=ERROR_SUCCESS)		{			nError = GetLastError();			//printf("ReadPasswordFromRegistry:RegQueryValueEx(...) failed, error: %d/n", nError);			::RegCloseKey(hRegKey);			return FALSE;		}		if (_tcslen(szAccount) < 1)			return FALSE;		HCRYPTPROV hProv = NULL;		HCRYPTKEY hKey = NULL;		HCRYPTKEY hXchgKey = NULL;		HCRYPTHASH hHash = NULL;		// has to be the same used to encrypt!		TCHAR szLocalPassword[] = _T("[email
C++ CryptEncrypt函数代码示例
C++ CryptDestroyHash函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。