Open source библиотека симметричного шифрования на PHP от



image image
> GenCoder >
image
> GenCoder >
image image

Что это и для чего?



Как это работает:

1. Подключение библиотеки GenCoder
image
//Подключается библиотека-класс GenCoder
require_once ("GenCoder.php");
$salt = "Моя соль для шифрования в приложении";
$gen_coder = new GenCoder($salt);

2. Генерация конфиденциальных данных
image
/*
При первоначальном запуске, а также при переинициализации ключа/паролей происходит
генерация секретного ключа и паролей отправителя и адресата для данного канала связи
*/
$gen_params = $gen_coder->init();
$key = $gen_params['key'];
$pass1 = $gen_params['pass1'];
$pass2 = $gen_params['pass2'];

//закодированное сообщение
$sender_hashcode = $gen_coder->sender_hashcode($pass1);
$receiver_hashcode = $gen_coder->receiver_hashcode($pass2);
3. Шифрование сообщения
image
//Исходное сообщение, отправляемое отправителем адресату, шифруется
$sender_hashcode = $gen_coder->sender_hashcode($pass1);
$receiver_hashcode = $gen_coder->receiver_hashcode($pass2);

$coded_message = $gen_coder->codeMessage($message, $key, $pass1, $receiver_hashcode);
4. Сообщение зашифрованно и сжато.
image
//Исходное сообщение надежно шифрованно,
//а также сжато для оптимизации хранения и передачи шифра по сети адресату
$sender_hashcode = $gen_coder->sender_hashcode($pass1);
$receiver_hashcode = $gen_coder->receiver_hashcode($pass2);

$coded_message = $gen_coder->codeMessage($message, $key, $pass1, $receiver_hashcode);
5. Дешифрование сообщения
image
//Для дешифрования шифра необходим код получателя, а также наличие секретного кода канала.
// Таким образом, информация надежна защищена от постороннего просмотра и вмешательства
//$key берется из хранилища у адресата
//$sender_hashcode  - хеш (публичный ключ) отправителя
//$pass2 - пароль адресата на дешифрование канала с данным отправителем

$plain_message = $gen_coder->decodeMessage($coded_message, $key, $sender_hashcode, $pass2);
//$plain_message - исходная, дешифрованная информация


Усиление защиты ключа путем генерации функции обхода ключа (сигнатуры пути)

Обычно при использовании метода одноразовых блокнотов или приближенных к нему алгоритмов сообщения в канале шифрованной связи шифруются каждый раз уникальным ключем из уникальных последовательностей случайных символов. При этом возникают следующие критические проблемы:
1. Необходимо заранее передавать уникальный случайный ключ отправита адресату для каждого шифросообщения.
2. Для больших объемов данных требуется передавать большие ключи из случайных символов, чтобы сохранить криптостойкость алгоритма, что само по себе трудозатратно и неудобно.
Рандомизация секретного ключа позволяет избавиться сразу от этих двух проблем путем простого решения:
1. Исходный секретный ключ состоит из сгенерированных случайным образом символов создается разово и хранится у адресата и отправителя при создании шифрованного канала. При этом секретный ключ достаточно малого размера, по умолчанию он составляет от 64 до 100 символов.
2. При каждом новом шифровании сообщения отправителя на основе сложного алгоритма генерируется метод обхода исходного ключа, при этом метод зависит от хешей ключей адресата и отправителя, шифруемого сообщения и исходного ключа.
То есть, предметно говоря, если при шифровании методом Вернама первый символ шифросообщения получается операцией XOR первого символа исходного текста с первым символов ключа и так далее, пока не будут в арифметическом порядке перебраны символы всего сообщения и ключа, то данный метод сопоставляет последовательности символов исходного сообщения собственную последовательность символов ключа.



Онлайн-тестирование:

Закодировано в:

Пароли:

Секретный ключ:

Дешифрование:




Как использовать библиотеку:

1. Cкачать класс GenCoder.php
Класс GenCoder



2. Минимально функциональный код использования библиотеки представлен ниже
require_once ("GenCoder.php");
$salt = "Моя соль для шифрования в приложении";
$gen_coder = new GenCoder($salt);
$gen_params = $gen_coder->init();
$key = $gen_params['key'];
$pass1 = $gen_params['pass1'];
$pass2 = $gen_params['pass2'];

//закодированное сообщение
$sender_hashcode = $gen_coder->sender_hashcode($pass1);
$receiver_hashcode = $gen_coder->receiver_hashcode($pass2);

$coded_message = $gen_coder->codeMessage($message, $key, $pass1, $receiver_hashcode);
$plain_text = $gen_coder->decodeMessage($coded_message, $key, $sender_hashcode, $pass2);



Обратная связь:

Разработчик https://bitbucket.org/astricus

Отзывы, пожелания и предложения принимаются сюда: homoastricus2011@gmail.com