3DES CryptoAPI

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by winsock, 12 Dec 2010.

  1. winsock

    winsock New Member

    Joined:
    15 Aug 2010
    Messages:
    57
    Likes Received:
    2
    Reputations:
    0
    Не получается заставить работать код декрипта 3DES = \

    Code:
    
    bool Decode3Des(uchar* input,DWORD szInput,uchar* key1,uchar* key2,uchar* key3,uchar* iVector)
    {
    	HCRYPTPROV hProv;
    	CryptAcquireContext(&hProv,NULL,MS_ENHANCED_PROV,PROV_RSA_FULL,CRYPT_DELETEKEYSET);
    	if(CryptAcquireContext(&hProv,NULL,MS_ENHANCED_PROV,PROV_RSA_FULL,CRYPT_NEWKEYSET)){
    		
    		BLOBHEADER keyHeader;
    		keyHeader.bType=PLAINTEXTKEYBLOB;
    		keyHeader.bVersion=CUR_BLOB_VERSION;
    		keyHeader.reserved=0;
    		keyHeader.aiKeyAlg=CALG_3DES;
    
    		uchar bKey[36];
    		memset(bKey,0,36);
    		memcpy(bKey,&keyHeader,sizeof(keyHeader));
    		bKey[sizeof(keyHeader)]=24;
    		memcpy(bKey+sizeof(keyHeader)+sizeof(DWORD),key1,8);
    		memcpy(bKey+sizeof(keyHeader)+sizeof(DWORD)+8,key2,8);
    		memcpy(bKey+sizeof(keyHeader)+sizeof(DWORD)+16,key3,8);
    
    		HCRYPTKEY hKey;
    		uint result0 =CryptImportKey(hProv,bKey,sizeof(keyHeader)+sizeof(DWORD)+24,NULL,0,&hKey);
    		 
    		DWORD desMode=CRYPT_MODE_CBC;
    		uint result = CryptSetKeyParam(hKey,KP_MODE,(BYTE*)&desMode,0);
    
    		desMode=PKCS5_PADDING;
    		        //ZERO_PADDING;
    		uint result1 = CryptSetKeyParam(hKey,KP_PADDING,(BYTE*)&desMode,0);
    		uint error1=GetLastError();
    		
    		uint result2 =CryptSetKeyParam(hKey,KP_IV,iVector,0);
    		
    		
    		uint result213=CryptDecrypt(hKey,0,TRUE,0,input,&szInput);
    
    		uint error=GetLastError();
    
    		CryptDestroyKey(hKey);
    
    		CryptReleaseContext(hProv,0);
    
    		return 1;
    	}
    	return 0;
    }
    
    
    
    CryptDecrypt завершается с ошибкой.

    код ошибки 80090005 2148073477 NTE_BAD_DATA: Bad Data.
     
  2. winsock

    winsock New Member

    Joined:
    15 Aug 2010
    Messages:
    57
    Likes Received:
    2
    Reputations:
    0
    Впринцепи все правильно,косяк был в кеях