HelpF.pro

Алгоритм шифрования RC4

Для решения некоторых задач, иногда требуется имееть возможность шифровать и дешифровывать, какие-то данные. Но при этом нет возможности использовать стороние внешнии компоненты.
Предлагаем пример реализации алгоритма шифрования RC4 на встроенном языке 1С.

Код 1C v 7.x
 // оперделим два массива для формирования S-Блока
перем масТемп[254], масSБлок[254];
// переменая для управления объектом Script Control
перем олеШелл;

//*******************************************
// стрКодировать(стрИсточник, стрКлюч)
//
// Параметры:
//  стрИсточник - Строка. Набор симвлов для преобразования.
//  стрКлюч - Строка. Набор симвлов для формирования S-Блока.
//
// Возвращаемое значение:
//  Строка. Набор симвлов после преоброзования.
//
// Описание:
//  Функция шифрует или дешифрует набор символов с помощью
//  S-Блока сформированного на основе ключа.
//
функция стрКодировать(стрИсточник, стрКлюч)
    // Инициализация данных для формирования S-Блока
    чисДлинаКлюча = стрдлина(стрКлюч);
    у = 0;
    для х = 1 по 254 цикл
        у = у + 1;
        у = ?(у > чисДлинаКлюча, 1, у);
        масТемп[х] = кодсимв(сред(стрКлюч, у, 1));
        масSБлок[х] = х - 1;
    конеццикла;
    // Формирование S-Блока
    у = 0;
    для х = 1 по 254 цикл
        у = (у + масТемп[х] + масSБлок[х]) % 254 + 1;
        чисТемп = масSБлок[х];
        масSБлок[х] = масSБлок[у];
        масSБлок[у] = чисТемп;
    конеццикла;
    // Ну и сообственно преобразование
    чисДлинаТекста = стрдлина(стрИсточник);
    у = 0;
    ч = 0;
    для х = 1 по чисДлинаТекста цикл
        чисБайт = кодсимв(сред(стрИсточник, х, 1));
        у = (у + 1) % 254 + 1;
        ч = (ч + масSБлок[у]) % 254 + 1;
        чисТемп = масSБлок[у];
        масSБлок[у] = масSБлок[ч];
        масSБлок[ч] = чисТемп;
        чисТемп = масSБлок[(масSБлок[у] + масSБлок[ч]) % 254 + 1];
        чисБайт = число(олеШелл.Run("intXOR", чисБайт, чисТемп));
        Ответ = Ответ + симв(чисБайт);
    конеццикла;
    // Возвращаем полученную строку
    возврат Ответ;
конецфункции

//*******************************************
// Этот блок обязателен.
// Необходимо что бы он отработал до первого вызова
// функции стрКодировать
//*******************************************
// Создаем объект для управления скриптами
олеШелл = создатьобъект("MSScriptControl.ScriptControl");
// Устанавливаем рабочий язык для выполнения скриптов
олеШелл.Language = "VBScript";
// Сам срипт для проведения логически-исключающего сложение двух операндов
стрКод =
"function intXOR(x, y)
|  intXOR = x xor y
|end function";
// Добавим наш скрипт в котрол скриптов
олеШелл.AddCode(стрКод);

Ответ = стрКодировать("Это пример реализации алгоритма шифрования RC4 на языке 1С", "Казахстанский Клуб профессионалов 1С");
сообщить(Ответ);
Ответ = стрКодировать(Ответ, "Казахстанский Клуб профессионалов 1С");
сообщить(Ответ);

Скачивать файлы может только зарегистрированный пользователь!
Решение предложил IUnknown
Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/410.html