<MyRusakov.ru />

Программирование на C++ с Нуля до Гуру

Программирование на C++ с Нуля до Гуру

Данный курс научит Вас программировать на языке C++, который, несмотря на свой почтенный возраст, необычайно сильно востребован. Курс состоит из 6 разделов, посмотрев которые и выполнив все упражнения, Вы с нуля освоите этот язык и сможете создавать самые разные проекты любой сложности на C++.

Для закрепления материала из уроков к ним идёт множество упражнений.

Дополнительно к курсу идёт вспомогательная система, которая не даст Вам забросить начатое на полпути.

Также вместе с курсов Вы получаете Бонус "Программирование на C++ в Unreal Engine", в котором Вы научитесь создавать игры на C++ с использованием этого движка.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Зачем Вы изучаете программирование/создание сайтов?

Шифрование больших файлов с помощью OpenSSL в PHP

Шифрование больших файлов с помощью OpenSSL в PHP

Шифрование больших файлов имеет свои особенности. Так, например, файл, размер которого превышает несколько сотен мегабайт не удастся зашифровать сразу весь - так как на это просто не хватит памяти. Поэтому в таких случаях файлы приходиться шифровать небольшими блоками - кусками.

В примере ниже показано как зашифровать большой файл с помощью OpenSSL в PHP.


<?php


// размер блока ("куска"), шифруемого файла
define('FILE_BLOCK_SIZE', 10240);

/**
 * @param  $source  Путь к шифруемому файлу + название самого файл
 * @param  $dest    Путь куда будет сохранен зашифрованный файл + название самого файла
 * @param  $key     Ключ шифрования
 */
function encrypt_file(string $source, string $dest, string $key)
{
    $cipher = 'aes-256-cbc'; // шифр
    $ivLenght = openssl_cipher_iv_length($cipher); // длина вектора инициализации
    $iv = openssl_random_pseudo_bytes($ivLenght); // генерирует псвевдо-случайную строку - вектор инициализации

    $fd_source = fopen($source, 'rb'); // открываем исходный файл в режиме бинарного чтения
    $fd_dest   = fopen($dest, 'w'); // открываем новый файл в режиме записи

    // записываем вектор инициализации в начало файла
    // он нам понадобиться при расшифровке
    fwrite($fd_dest, $iv);

    // читаем исходный файл пока не достигнем конца файла
    while ( !feof($fd_source) ) {
        // из исходного файла берем "кусок"
        $plaintext = fread($fd_source, $ivLenght * FILE_BLOCK_SIZE);
        // шифруем этот "кусок"
        $ciphertext = openssl_encrypt($plaintext, $cipher, $key, OPENSSL_RAW_DATA, $iv);
        // ????
        //$iv = substr($ciphertext, 0, $ivLenght);

        fwrite($fd_dest, $ciphertext);
    }

    // закрываем файлы
    fclose($fd_source);
    fclose($fd_dest);
}

/**
 * @param  $source  Полный путь к зашифрованному файлу
 * @param  $dest    Путь, куда будет сохранен расшифрованный файл + название самого файла
 * @param  $key     ключ шифрования
 */
function decrypt_file(string $source, string $dest, string $key)
{
    $cipher = 'aes-256-cbc';
    $ivLenght = openssl_cipher_iv_length($cipher);

    $fd_source = fopen($source, 'rb');
    $fd_dest   = fopen($dest, 'w');

    // извлекаем сохраненный вектор инициализации из начала файла
    $iv = fread($fd_source, $ivLenght);

    // по "кусочкам" расшифровываем файл
    while ( !feof($fd_source) ) {
        $ciphertext = fread($fd_source, $ivLenght * (FILE_BLOCK_SIZE + 1));
        $plaintext = openssl_decrypt($ciphertext, $cipher, $key, OPENSSL_RAW_DATA, $iv);
        //$iv = substr($plaintext, 0, $ivLenght);

        fwrite($fd_dest, $plaintext);
    }

    fclose($fd_source);
    fclose($fd_dest)  ;
}


Вызываем так:


<?php

    $src_file  = "новый_видеокурс.avi";
    $dest_file = "новый_видеокурс.avi.encrypted";
    $key = "самыйсильныйпароль";

    // зашифровываем
    encrypt_file($src_file, $dest_file, $key);

    // расшифровываем
    decrypt_file($src_file, $dest_file, $key);


Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.