首先,如果我在這裏丟失了某些東西,我很抱歉。這是我第一次嘗試Windows CryptAPI,雖然我已經通過谷歌,MSDN,MSDN的例子等,我不明白爲什麼會出現這個問題。 我有下面的代碼,它應該複製在特定地址找到的操作碼(字節塊),加密它們,然後將它們寫回。這絕不是一個完整的代碼,它的錯誤檢查很少。我正在使用AES256。CryptEncrypt AES 256在加密最後一塊時失敗
bool CryptoClass::encrypt(DWORD address, DWORD len)
{
DWORD dwBlockLen = 0;
DWORD dwBufferLen = 0;
DWORD dwCount = 0;
PBYTE pbBuffer = NULL;
dwBlockLen = AES_BLOCK_SIZE - AES_BLOCK_SIZE % ENCRYPT_BLOCK_SIZE;
dwBufferLen = dwBlockLen + ENCRYPT_BLOCK_SIZE;
if(pbBuffer = (BYTE *)malloc(dwBufferLen))
{
bool EOB = FALSE;
while (dwCount <= len))
{
memcpy((void*)pbBuffer,(void*)address,dwBlockLen);
if ((len - dwCount) < dwBlockLen) EOB = TRUE;
if(CryptEncrypt(hKey,NULL,EOB,0,pbBuffer,&dwBlockLen,dwBufferLen))
{
memcpy((void*)address,(void*)pbBuffer,dwBlockLen);
address += dwBlockLen;
dwCount += dwBlockLen;
}
else
{
error = GetLastError();
MessageBoxA(NULL,"problem","error",MB_OK);
}
}
free(pbBuffer);
return true;
}
else return false;
}
從我的理解AES可以加密的16個字節的塊,所以AES_BLOCK_SIZE被定義爲16. 也是我ENCRYPT_BLOCK_SIZE被設置爲8。我基本上覆制我上MSDN找到一個例子,在調整了AES256和用於內存而不是文件。 但是,在我的while循環中,無論何時它到達緩衝區的末尾,FINAL被設置爲TRUE,CryptEncrypt都會失敗。我嘗試了很多不同的方式來做到這一點,但總是失敗。 是否因爲最後的緩衝區小於16字節? 有些人可以幫忙,當談到加密時,我是一個總諾貝爾。 謝謝 編輯:GetLastError返回:0x000000ea
這到底是什麼ENCRYPT_BLOCK_SIZE做塊?你有指向所用示例的指針嗎? – 2012-02-01 21:43:59