AES-256 проблема с расшифровкой после шифрования - PullRequest
0 голосов
/ 15 сентября 2018

256 класс шифрования

VirtualAES.cpp находится в https://pastebin.com/EWrn1GJ3 VirtualAES.h находится в https://pastebin.com/tbC8mR0K

Хорошо, теперь мне нужно это, у меня есть этот код

char rawData[36] = {
    0x15, 0x7D, 0x90, 0x5C, 0xA2, 0x15, 0x61, 0xD5, 0xBA, 0x0F, 0x46, 0x18,
    0x53, 0x47, 0xA9, 0x7A, 0xD2, 0x19, 0x69, 0x50, 0x3A, 0x6F, 0xF0, 0x50,
    0xA8, 0x19, 0x9C, 0x0C, 0xE4, 0xC3, 0xB8, 0x37, 0x01, 0xC3, 0x0A, 0x23 
}

Я использую это для шифрования

void AESCrypt(char *rawData0,int size) {

    unsigned char key[KEY_256] = "S#q-}=6{)BuEV[GDeZy>~M5D/P&Q}7>";

    unsigned char plaintext[BLOCK_SIZE];
    unsigned char ciphertext[BLOCK_SIZE];

    aes_ctx_t* ctx;
    virtualAES::initialize();
    ctx = virtualAES::allocatectx(key, sizeof(key));

    int count = 0;
    int index = size / 16; //Outer loop range
    int innerCount = 0;
    int innerIndex = 16; //We encrypt&copy 16 Bytes for once.
    int dataIndex = 0; //Non resetting @rawData index for encryption
    int copyIndex = 0; //Non resetting @rawData index for copying encrypted data.



    for (count; count < index; count++)
    {
        for (innerCount = 0; innerCount < innerIndex; innerCount++)
        {
            plaintext[innerCount] = rawData[dataIndex];
            dataIndex++;
        }

        virtualAES::encrypt(ctx, plaintext, ciphertext);

        for (innerCount = 0; innerCount < innerIndex; innerCount++)
        {
            rawData[copyIndex] = ciphertext[innerCount];
            copyIndex++;
        }
    }

    delete ctx;
}

Хорошо, это работает просто отлично, только на момент, когда я пытаюсь расшифровать его с помощью:

void AESDecrypt(char* toDecrypt, int size)
{
    //Explanation exist in Builder
    unsigned char key[KEY_256] = "S#q-}=6{)BuEV[GDeZy>~M5D/P&Q}7>";

    unsigned char ciphertext[BLOCK_SIZE];
    unsigned char decrypted[BLOCK_SIZE];

    aes_ctx_t* ctx;
    virtualAES::initialize();
    ctx = virtualAES::allocatectx(key, sizeof(key));

    int count = 0;
    int index = size / 16;
    int innerCount = 0;
    int innerIndex = 16;
    int dataCount = 0;
    int copyCount = 0;
    for (count; count < index; count++)
    {
        for (innerCount = 0; innerCount < innerIndex; innerCount++)
        {
            ciphertext[innerCount] = toDecrypt[dataCount];
            dataCount++;
        }

        virtualAES::decrypt(ctx, ciphertext, decrypted);

        for (innerCount = 0; innerCount < innerIndex; innerCount++)
        {
            toDecrypt[copyCount] = decrypted[innerCount];
            copyCount++;
        }
    }

    delete ctx;
}

Мне нужно зашифровать каждый байт из rawData, но где-то есть ошибка: расшифровка не дает мне работающий байтовый массив, как до шифрования. Я не знаю, почему кто-то может мне помочь? THX

Перед кодом: 15 7D 90 5C A2 15 61 D5 BA 0F 46 18 53 47 A9 7A D2 19 69 50 3A 6F F0 50 A8 19 9C 0C E4 C3 B8 37 01 C3 0A 23 04 36 80 F6 42 CF 91 38 C1 C3 56 16 После: 84 80 78 4A E5 49 E5 C3 64 E1 09 00 62 28 93 06 43 4E A5 3A 81 37 33 DA 6E E2 CD 70 2C 9B 91 74 81 75 8B 69 C7 42 69 13 99 C4 FF 82 6E 1D 08 42 и расшифровывается обратно: 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Я использую AESCrypt (rawData, 48); AESDecrypt (RAWDATA, 48);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...