2009-10-07 9 views
1

128BIT AES 암호 해독을 사용하여 암호를 해독하려고합니다. CryptDecrypt를 호출 할 때 "잘못된 알고리즘이 지정되었습니다"라는 오류가 발생합니다. 여기에 게시 된 라이브러리를 사용할 때도 동일한 문제가 발생합니다. http://www.codeproject.com/KB/security/WinAES.aspx알고리즘이 잘못 지정되었습니다. CryptoAPI

이 오류의 원인은 무엇입니까? 내가 레지스트리와 AES 라이브러리에서 확인할 비주얼 스튜디오 2008와 vista64bit에 함께 CryptoAPI를 사용하고

편집

BYTE*& encryptedData /* get data length */ 
HCRYPTPROV cryptoHandle = NULL; 
HCRYPTKEY aesKeyHandle = NULL; 

hr = InitWinCrypt(cryptoHandle); 
if(FAILED(hr)) 
{ 
    return hr; 
} 

AesKeyOffering aesKey = { {PLAINTEXTKEYBLOB, CUR_BLOB_VERSION, 0, CALG_AES_128}, 16, { 0xFF, 0x00, 0xFF, 0x1C, 0x1D, 0x1E, 0x03, 0x04, 0x05, 0x0F, 0x20, 0x21, 0xAD, 0xAF, 0xA4, 0x04 }}; 

if(CryptImportKey(cryptoHandle, (CONST BYTE*)&aesKey, sizeof(AesKeyOffering), NULL, 0, &aesKeyHandle) == FALSE) 
{ 
    // DO error 

    return HRESULT_FROM_WIN32(GetLastError()); 
} 

if(CryptSetKeyParam(aesKeyHandle, KP_IV, { 0xFF, 0x00, 0xFF, 0x1C, 0x1D, 0x1E, 0x03, 0x04, 0x05, 0x0F, 0x20, 0x21, 0xAD, 0xAF, 0xA4, 0x04 } , 0) == FALSE) 
{ 
    return HRESULT_FROM_WIN32(GetLastError()); 
} 

BYTE blah2 = CRYPT_MODE_CBC; 
// set block mode 
if(CryptSetKeyParam(aesKeyHandle, KP_MODE, &blah2, 0) == FALSE) 
{ 
    // 

    return HRESULT_FROM_WIN32(GetLastError()); 
} 

DWORD lol = dataLength/16 + 1; 
DWORD lol2 = lol * 16; 
if(CryptDecrypt(aesKeyHandle, 0, TRUE, 0, encryptedData, &lol2) == FALSE) 
{ 
    return HRESULT_FROM_WIN32(GetLastError()); 
} 

InitWinCrypt 기능

if(!CryptAcquireContextW(&cryptoHandle, NULL, L"Microsoft Enhanced RSA and AES Cryptographic Provider", PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) 
{ 
    if(!CryptAcquireContextW(&cryptoHandle, NULL, L"Microsoft Enhanced RSA and AES Cryptographic Provider", PROV_RSA_AES, 0)) 
    { 
     return HRESULT_FROM_WIN32(GetLastError()); 
    } 
    else 
    { 
     return S_OK; 
    } 
} 
return S_OK; 
...이

AesOffering 구조체 :

struct AesKeyOffering 
{ 
    BLOBHEADER m_Header; 
    DWORD m_KeyLength; 
    BYTE Key[16]; 
}; 

EDIT2

내 컴퓨터를 재부팅하고 CBC 청크를 remvoing 한 후. 지금 잘못된 데이터 오류가 발생합니다. 데이터는 C#에서 잘 해독됩니다. 하지만 난 wincrypt를 사용하여이 작업을 수행해야합니다.

+0

마음이 코드를 게시 설정하는 CryptSetKeyParam 전화를 치우는 시도 않음을 감안할 때? – GRB

+0

는 – UberJumper

+0

난 하드 코어하지 않는 경우 또한 "마이크로 소프트 향상된 RSA 및 AES 암호화 공급자"가 ULONG_PTR & cryptoHandle 그게 __inout doent 작업 – UberJumper

답변

1

cryptoHandleInitWithCrypt으로 보내시겠습니까?

if(!CryptAcquireContextW(&cryptoHandle, ... 

cryptoHandleInitWinCrypt의 사본을 수정하는 것입니다 코드, 그렇지 않은 경우.


편집 :는, CRYPT_MODE_CBC

+0

이 경과하기 방법 윈도우 XP에 대한 하나를 잡고있다 기록했다. – UberJumper

+0

그와 같은 오류가 있었는지, 나는 가능한 모든 일을 시도했습니다. – UberJumper

+0

홀수, 나는 그 변경 (32 비트 비스타, msvc 2008)을 만들 때까지 "잘못된 알고리즘을 지정했습니다"라고 말했습니다. – GRB

관련 문제