0

ファイルを暗号化する次のコードがあります。

static const char* KEY = "Test";

...

    FILE* pFile = fopen("skills.dat", "wb+");

char* result = new char[ (TOTAL_SKILLS + 1) * sizeof(int)];
memset(result, 0, (TOTAL_SKILLS + 1) * sizeof(int));


int counter = 0;
while(counter != TOTAL_SKILLS + 1)
{
    char szSkillName[40] = "";
    strcpy(szSkillName,(buffer + (counter * 0x12C)));

    int skillDelay = *(int*)(buffer + (counter * 0x12C) + 228);


    *(int*)(result + (counter * 4)) = skillDelay;

    counter++;
    printf("Skill %s saved.\r\n",szSkillName);
}
CRC4 crc;
crc.Encrypt(result,KEY, (TOTAL_SKILLS + 1) * sizeof(int));

fwrite(result,1, (TOTAL_SKILLS + 1) * sizeof(int),pFile);
fclose(pFile);

の内容はbuffer重要ではないかもしれませんが、問題は暗号化されたデータを解読できないことです。明らかに同じキーを使用していますが、復号化された結果は元の入力バッファと同じではありません。何が起こっているのでしょうか?これは奇妙に聞こえます...

復号化コード:

LPCSTR name = "skills.dat";
    int counter = 0;
std::ifstream myFile(name, std::ios::binary | std::ios::out );

if(myFile.fail())
{
    myFile.close();
    return false;
}

int len = (TOTAL_SKILLS + 1) * sizeof(int);
char* buffer = new char[len];

myFile.read(buffer,len);
myFile.close();

CRC4 crc;
crc.Decrypt(buffer,KEY,len);
4

1 に答える 1

0

Encrypt 関数内とキー生成ハッシュ内の SWAP マクロを削除することで、問題を解決しました。

于 2012-07-31T02:13:41.310 に答える