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/faq7/view/410.html