Данный метод работает на Платформе 8.3 и т.п.
09.07.19 Добавлена обработка шифрования файлов
Сам по себе шифратор с открытым кодом дает несомненное преимущество перед продуктами с закрытым кодом, которые имеют потенциальные риски умышленной уязвимости.
К примеру библиотека 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 Добавлена обработка шифрования файлов
Просто круто. Это гениально?
Шифровать строки модуля обработки и хранить в ней же пароль?
(1) это просто, может сам шифр и не сильно устойчив к шифрованию, но если немного изменить алгоритм, на индивидуальный, то на мой взгляд расшифровка станет невозможна ближайшие столетия, даже имея мощные Асики.
К примеру RSA алгоритмы, уже под угрозой расшифровки. 18 значный пароль, имея Хэндшейк(ключ согласования RSA) подбирается за 20 дней на Asic устройстве
(2)
Достаточно хранить хеш-код SHA256. С обрезанными пробелами он очень тяжело вытаскивается декомпилятором.
К примеру если пользоваться сторонними приложениями он легко вытаскивается как обращение 1С-ом к Capicom например.
Если именить код на
Показать
Так же массив хеша можно добавить 1-10 мусорных символа. К примеру.
Если использовать обработку в чистом виде то можно. А если индивидуально допишите, то сложнее будет перехватывать
А если все это писать на C++. То можно вместа sha-256, Ethash Бутерина использовать с даг файлом на 2-4 гигабайта. Только тогда надо будет видеокарту задействовать.
+1. Напишите мессенджер на андроид!
(6)
можно пользоваться телеграмм + плагин с доп шифрацией. Без RSA с передачей ключей лично в руки
(7) не понял про плагин. Это в телеграм уже есть?
(8)еще нет надо сделать 🙂
Месяц назад продал, машину. Ко мне приехал черовек из деревни с распечаткой где и когда я парковался, со всеми моими штрафами, неуплаченными налогами и временем прохождения то, и информацией об ОСАГО итп. Говорит в телеграмм канале за 500р купил.
И тут я решил пошифроваться.
ПыСы: Ты понимаешь Карл, человек из деревни знает обо мне почти все — куда это годится… если в гос органах информация льется как из душа.
Мало им того что фотки приходят жене со штрафами, а если я Бухгалтера подвез до банка — как жене это объяснить?!
Никогда больше не лезьте в криптографию. Ваш алгоритм ломается за 1 секунду, т.к. «ключ» повторяется. Да это даже не ключ, а просто хэш от пароля, который даже перебирать не надо. Пожалуйста, оставьте эту затею и не вводите людей в заблуждение
(10)
А если ключ при каждом повторе будет в степень «X» кратно соответсвующего символа? Вы не читали в тексте где написано — что алгоритм можно усложнять?
К примеру ту зависимость что на картинке картинке.
Или просто каждый раз хешировать ключевой хеш повторно при повторе? при таком раскладе думаю до конца галактической зимы будете расшировывать
За секунду он подберет., это вы в секундах световых лет ведете времяисчисление?
Ну в целом ваше невежество принято и зачтено.
Добавлен сложный метод шифровки.
(12) Месье хотел сказать, что не комильфо хранить и алгоритм, и пароль (или его аналог, который и будет использоваться для расшифровки) в открытом виде, а внешняя обработка 1с как раз и имеет открытый вид. А то, что Вы пытаетесь запутать алгоритм шифрования не усложнит стойкость ко взлому! Сравните свою поделку с реализацией AES.
(14) реализация AES хороша, главная проблема всех известных алгоритмов — та что он известна. И под них имеются Asic устройства.
Хранить ключи к шифру вас никто не заставляет.
Это так сказать ваше дело где хранить: в голове, на бумаге флешке или в облаке…
(13)Интересно, а предложенный вами вариант более устойчив к взлому чем этот?:https://infostart.ru/public/518576/
(13) покажи еще скорость шифрования
(16), (17), не понимаю в чём дело: я никогда не был в этой статье до текущего момента, но получил уведомления о ваших сообщениях как будто они были ответом на моё сообщение.
(9)
вэлкам ту зе рил ворлд))
(18)Может Инфостарт перевели на 1С движок. А у нас в 1С и не такое бывает, сами знаете)))
(18)может это знак к тому — что пора шифроваться
(16) изучу то что вы указали на днях напишу. Но лучше всего придумать свой принцип и держать его в голове. Даже зная пароль и не зная алгоритм — хрен кто что расшифрует. Я не претендую на то чтобы кто то использовал алгоритм для шифра, статья для шевеления мозга
(20)да он изначально на. 1с битрексе
(17) скорость на 1с? Откуда такое счастье, если только на 16 движке сделают реализацию OpenGL или Cuda
Если интересно, могу скинуть как я делал sha-512 года 3 назад. Там, правда, подключался js скрипт и использовалась какая-то виндовая компонента.
Молодец. Я тоже как-то занимался шифрованием ярлыков 1С. Тема интересная.
(25)где то видел такое
(27) Может быть, но я своё не выкладывал. Кстати, вспомнил: код js я переписал под 1С, так что там из стороннего использовалась только виндовая компонента криптографии.
(28)
может стоит выложить?
(29) Вечером доберусь до домашнего компа и кину здесь в комментариях. Оно не стоит отдельной публикации.
(29) Нашёл копию в облаке. Шифруемая строка называется ТекстЗапроса т.к. шифровался текст HTTP запроса к API. Переменная Секрет это API-ключ, он же соль.
Показать
(29) а сравнение скорости со штатной можешь выложить? просто интересно
(26)Хм это не ваш код нашим клиентам все данные зашифровал и просил червонец? 😉
Нет. Я ярлыки запуска шифровал, что бы не понятно было где база лежит
было бы здорово, если бы кто нибудь выложил пример шифрования на JS. Это нужно для мобильной платформы. Там виндовой компоненты нет и с шифрованием всё грустно. А между тем мобильное приложение на 1С весьма востребовано
(36) а как же объект System.Security.Cryptography? На JS не работает?
(37)Работает, но я хотел это применить на мобильной платформе, а там ДотНета не имеется
(38) А что шифровать будете? Текстовые поля?
(39)Именно! Идея такая — юзер в офлайне шифрует свои данные.
Есть конечно вариант через HTTPS. например юзер вносит данные по «безопасному каналу», они даже не хранятся на смартфоне. Скачиваются по мере необходимости — по запросу. И даже если смарт украдут или потеряют, данные всё равно на серваке.
А есть вариант офлайн, когда строковые поля справочника шифруются. А пароль для дешифровки вводится пр запуске приложения. И даже можно пустить злоумышленика далее в приложение — он всё равно получит билеберду, вместо осмысленного текста.