Сам по себе шифратор с открытым кодом дает несомненное преимущество перед продуктами с закрытым кодом, которые имеют потенциальные риски умышленной уязвимости.
К примеру библиотека Capicom может долго время храниться ключи в файле подкачки Windows.
Сам метод можно бесконечно усложнять и модифицировать.
При сложном варианте расшифровать файл назад без пароля (от 8 символов) -станет практически невозможным.
Минусы данного метода - крайне низкая скорость работы.
Так же разработчиков прошу не использовать это во вред: вымогая деньги у пользователей шифруя их файлы. Имейте к себе уважение.
Сначала мы получаем массивы из текста - которые необходимо зашифровать.
Далее из пароля делаем хеш код в формате SHA256 для надежности
Процедура КнопкаВыполнитьНажатие(Кнопка)
массивТекста = РазложитьТекстВМассивПодстрок(СокрЛП(ИсходныйТест),символы.ПС);
Хеш=Новый ХешированиеДанных(ХешФункция.SHA256);
Хеш.Добавить(КодШифра); //Код Шифра - это наш пароль
КлючШифра = Хеш.ХешСумма;
//КлючШифра - это хеш от пароля в формате (SHA256) На котором работает Биткоин
МассивХеша = новый Массив;
КлючШифра = СтрЗаменить(КлючШифра," ","");
МассивХеша = РазложитьСтрокуВМассивзнаков(КлючШифра,МассивХеша);
ЗашифрованныйТекст = ЗашифроватьТекст(массивТекста, МассивХеша);
КонецПроцедуры
Ниже приведен код текста шифрования:
//МассивСимволов - это текст переведенный в Массив
//КлючШифра - это хеш ключ переведенный массив
Функция ЗашифроватьТекст(МассивСимволов,КлючШифра)
ЗашифрованнаяСтрока = "";
ГСЧ = Новый ГенераторСлучайныхЧисел(1);
ПозицияСимволаХэша = 0;
ДлинаХэша = МассивХеша.количество();
для каждого ном из МассивСимволов Цикл
//Извлекаем номр шифруемого символа UTF-8
НомерСимвола = КодСимвола(ном);
Если ПозицияСимволаХэша >= ДлинаХэша-1 тогда
ПозицияСимволаХэша = 0;
КонецЕсли;
//Позиция суммируемого хеша
ПозицияСимволаХэша = ПозицияСимволаХэша+1;
//Извлекаем номр символа хеша UTF-8
СимволаХэша = КодСимвола(МассивХеша[ПозицияСимволаХэша]);
//Суммируем СуммыПозиций кодов
Код_Зашифрованный_символ = НомерСимвола+СимволаХэша;
Зашифрованный_символ = Символ(Код_Зашифрованный_символ);
ЗашифрованнаяСтрока= ЗашифрованнаяСтрока+Зашифрованный_символ;
//Усложним шифр добавляя тенического мусора при условие что КодСимвола хеша четный;
Если Цел(СимволаХэша/2) = СимволаХэша/2 тогда
СлучайноеЧисло = ГСЧ.СлучайноеЧисло(100, 1000);
ЗашифрованнаяСтрока= ЗашифрованнаяСтрока+Символ(СлучайноеЧисло);
КонецЕсли;
КонецЦикла;
возврат ЗашифрованнаяСтрока;
КонецФункции
Теперь сам код расшифровки
Функция РасшифроватьТекст(МассивСимволов,КлючШифра)
РасшифроватьТекст = "";
ПозицияСимволаХэша = 0;
ДлинаХэша = МассивХеша.количество();
пропуск = ложь;
для каждого ном из МассивСимволов Цикл
Если пропуск тогда
пропуск=ложь;
продолжить;
КонецЕсли;
НомерСимвола = КодСимвола(ном);
Если ПозицияСимволаХэша >= ДлинаХэша-1 тогда
ПозицияСимволаХэша = 0;
КонецЕсли;
ПозицияСимволаХэша = ПозицияСимволаХэша+1;
СимволаХэша = КодСимвола(МассивХеша[ПозицияСимволаХэша]);
Код_Зашифрованный_символ = НомерСимвола-СимволаХэша;
Зашифрованный_символ = Символ(Код_Зашифрованный_символ);
РасшифроватьТекст= РасшифроватьТекст+Зашифрованный_символ;
//Отсекаем мусор
Если Цел(СимволаХэша/2) = СимволаХэша/2 тогда
//пропускаем следующий символ;
пропуск = истина;
КонецЕсли;
КонецЦикла;
возврат РасшифроватьТекст;
КонецФункции
Ну а также прочие функции по преобразованию текста в массив
Функция РазложитьТекстВМассивПодстрок(Знач Стр, Разделитель = "") Экспорт
МассивСтрок = Новый Массив();
ДлинаРазделителя = СтрДлина(Разделитель);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
прервать;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
//Возврат МассивСтрок;
МассивТекста = новый массив;
для каждого ном из МассивСтрок Цикл
Если ном <> "" тогда
МассивТекста = РазложитьСтрокуВМассивзнаков(ном,МассивТекста);
КонецЕсли;
МассивТекста.добавить(символы.ПС);
КонецЦикла;
возврат МассивТекста;
КонецФункции
Функция РазложитьСтрокуВМассивзнаков(Знач Стр,МассивСтрок) Экспорт
//МассивСтрок = Новый Массив();
Длинастроки = СтрДлина(Стр);
Поз=0;
Пока 1=1 Цикл
Поз = Поз+1;
Если Длинастроки=0 Тогда
Если Стр <> "" тогда
МассивСтрок.Добавить(Лев(Стр,1));
КонецЕсли;
Возврат МассивСтрок;
КонецЕсли;
Если Стр <> "" тогда
МассивСтрок.Добавить(Лев(Стр,1));
КонецЕсли;
Стр = Прав(Стр,Длинастроки-1);
Длинастроки= Длинастроки-1;
КонецЦикла;
КонецФункции
Теперь мы получили инструмент к шифрации данных, тем не шифр имеет уязвимости в связи с повторяющимся ключом шифрации. Усложним ее перехешируя хеш-ключ при каждом повторении. Код с изменяющимся хешом-ключом представлен в сложной обработке (текст, файл). После чего получаем шифр стойкий к дешифровке. При пароле более 8 символов вероятность взлома шифра на сегодняшний день невозможна, так как необходим интеллектуальный анализ результата который потребует минимум 4-8 Гиг памяти платы(Asic устройства их не имеют.) и бесконечно много тактово-процессорных ресурсов для морфологического анализа полученного результата.
UPD 09.07.19 Добавлена обработка шифрования файлов