• XSS.stack #1 – первый литературный журнал от юзеров форума

Нужна помощь с CHACHA20(c++)

hahbah

Кодер C/C++
Пользователь
Регистрация
29.10.2021
Сообщения
148
Реакции
63
Гарант сделки
7
При шифровании и расшифровки получаю разный байты.
Это происходит рандомно, может совпасть вся последовательность байтов, а может ни один байт не совпасть.
Может кто-то знает почему так происходит.
Скрытый контент для зарегистрированных пользователей.

C++:
BOOL
decryptor::DecryptFileName(
    __in LPCWSTR EncryptedFilename,
    __in ECRYPT_ctx* CryptCtx,
    __in decryptor::LPFILE_INFO FileInfo ) {

    std::wstring filePath(EncryptedFilename);

    std::wstring directory;
    std::wstring encryptedBaseName;
    std::wstring extension;

    size_t lastDotPos = filePath.find_last_of(L".");
    if (lastDotPos != std::wstring::npos) {
        extension = filePath.substr(lastDotPos);
        filePath = filePath.substr(0, lastDotPos);
    }

    size_t lastSlashPos = filePath.find_last_of(L"\\/");
    if (lastSlashPos != std::wstring::npos) {
        directory = filePath.substr(0, lastSlashPos + 1);
        encryptedBaseName = filePath.substr(lastSlashPos + 1);
    }
    else {
        encryptedBaseName = filePath;
    }

    size_t len = encryptedBaseName.length();
    std::vector<uint8_t> encryptedBuffer(len / 2);

    for (size_t i = 0; i < len / 2; i++) {
        unsigned int value;
        wchar_t bytePair[3] = { encryptedBaseName[i * 2], encryptedBaseName[i * 2 + 1], L'\0' };
        swscanf_s(bytePair, L"%x", &value);
        encryptedBuffer[i] = static_cast<uint8_t>(value);
    }

    // Convert decrypted byte buffer back to wchar_t
    std::vector<u8> decryptedData(len / 2);

    ECRYPT_decrypt_bytes(CryptCtx, encryptedBuffer.data(), decryptedData.data(), len / 2);
    contextStream.str(std::wstring()); // очищаем stringstream
    for (int i = 0; i < 16; i++) {
        contextStream << std::hex << std::setw(8) << std::setfill(L'0') << CryptCtx->input[i] << L" ";
    }
    std::wstring decryptedFilename = directory + byteVectorToWString(decryptedData) + extension;

    // Rename the file
    if (MoveFileW(EncryptedFilename, decryptedFilename.c_str())) {
        ChangeFileName(decryptedFilename.c_str());

        return TRUE;
    }
    else {
        return FALSE;
    }
}

Скрытый контент для зарегистрированных пользователей.
Лог шифрования:
Using key for encryption: e38b2d3c9d576e7b6cc96b3d6aee6ad4ab4be0b98c6496e55e9c7c488db307d5
Using IV for encryption: 3ce967f204b67e4c
Filename before encryption (byte representation): 31323334352e747874
Filename after encryption (byte representation): 61bba466ae43d7d32f10ffc4b344f242457
*Next file*
Using key for encryption: e52966aa7fd532a16a105af5bdf7ae600c27e6ccf0ce7c81429f1f495b1cf16a
Using IV for encryption: 9b58c689cfce67d6
Filename before encryption (byte representation): 746578742e747874
Filename after encryption (byte representation): 37a0c7b9ca5b21265e4abdf22b95f297

Лог дешифрования:
Starting decryption of filename: C:\Users\Admin\Desktop\testDF\37a0c7b9ca5b21265e4abdf22b95f297
Encrypted base name: 37a0c7b9ca5b21265e4abdf22b95f297
Using key: e52966aa7fd532a16a105af5bdf7ae600c27e6ccf0ce7c81429f1f495b1cf16a
Using IV: 9b58c689cfce67d6
ECRYPT_ctx state before decryption: 61707865 3320646e 79622d32 6b206574 aa6629e5 a132d57f f55a106a 60aef7bd cce6270c 817ccef0 491f9f42 6af11c5b 00000001 00000000 89c6589b d667cecf
ECRYPT_ctx state after decryption: 61707865 3320646e 79622d32 6b206574 aa6629e5 a132d57f f55a106a 60aef7bd cce6270c 817ccef0 491f9f42 6af11c5b 00000002 00000000 89c6589b d667cecf
Decryption process completed.
Decrypted bytes: 74 00 65 00 78 00 74 00 2e 00 74 00 78 00 74 00
Decrypted filename: C:\Users\Admin\Desktop\testDF\text.txt
Starting decryption of filename: C:\Users\Admin\Desktop\testDF\61bba466ae43d7d32f10ffc4b344f242457
Encrypted base name: 61bba466ae43d7d32f10ffc4b344f242457
Using key: e38b2d3c9d576e7b6cc96b3d6aee6ad4ab4be0b98c6496e55e9c7c488db307d5
Using IV: 3ce967f204b67e4c
ECRYPT_ctx state before decryption: 61707865 3320646e 79622d32 6b206574 3c2d8be3 7b6e579d 3d6bc96c d46aee6a b9e04bab e596648c 487c9c5e d507b38d 00000001 00000000 f267e93c 4c7eb604
ECRYPT_ctx state after decryption: 61707865 3320646e 79622d32 6b206574 3c2d8be3 7b6e579d 3d6bc96c d46aee6a b9e04bab e596648c 487c9c5e d507b38d 00000002 00000000 f267e93c 4c7eb604
Decryption process completed.
Decrypted bytes: 31 00 32 00 33 00 34 00 35 00 de 38 8c 70 c5 66 15
Decrypted filename: C:\Users\Admin\Desktop\testDF\12345㣞炌曅
 
Последнее редактирование:
приложил, один файл расшифровался верно, во втором байты не совпали
И, что бы ты хотел узнать, показав этот ... лог?

Хотя, даже из твоего лога видно, что с процедурой расшифровки происходит что-то не то:
До: 746578742e747874
После: 74 00 65 00 78 00 74 00 2e 00 74 00 78 00 74 00
Если хочешь, чтоб помогли, покажи код
 
При шифровании и расшифровки получаю разный байты.
Это происходит рандомно, может совпасть вся последовательность байтов, а может ни один байт не совпасть.
Может кто-то знает почему так происходит.
Скрытое содержимое
Скрытое содержимое
 
не, функция ChangeFileName используется уже после дешифрования, при логировании я сразу получаю неверные байты после расшифровки.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Бро, а зачем тебе куча векторов и т.д и т.п? По моему ты как то переборщил с абстракциями. Если не умеешь кодить на плюсах, лучше учить теорию и только потом практиковаться, а не сразу идти лепить локеры
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх