Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/104: Рейтинг темы: голосов - 104, средняя оценка - 4.79
 Аватар для MihaniX
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4

Шифровщик/дешифровщик текстовых файлов на Batch

06.08.2013, 22:56. Показов 21322. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу сделать шифровщик текстовых файлов на Batch. Основы знаю. Кстати огромное спасибо Dragokas за многочисленные объяснения про Batch файлы и FraidZZ за подсказку!

Почему именно Batch? Ну нравится мне этот язык И знаю я его лучше всего остального.

Так вот. Предполагаю создание шифровщика таким способом:

1. Генерируется случайная буква/набор букв (если кто подскажет как сделать переменную цифрой - буду счастлив)
Например abc.
2. Все буквенные символы заключаются в проценты и меняются на сгенерированные случайные обозначения для каждой буквы и запишем в файл.
Bash
1
2
[а -> %abc%]
::^Как это сделать я не знаю. есть подозрения про команду findstr
Bash
1
echo %%abc%% >>crypted.txt
3. Объявим переменные (для дешифровщика)
set abc=a
4. Дешифруем
Bash
1
type crypted.txt >>encrypted.txt
*Ну и добавить дополнительные прикольные штуки типа
Прогрессбар
Visual Basic
1
CreateObject("SAPI.SpVoice").Speak"Encrypting in progress..."
Цветное меню выбора файлов

Не судите строго, я еще новичек...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.08.2013, 22:56
Ответы с готовыми решениями:

Зависание программы (простой шифровщик/дешифровщик)
хочу сделать простой шифровщик и дешифровщик. вот мой код.но при нажатии на кнопку прогамма зависает и выдаёт ошибку.где моя ошибка. ...

Требуется создать шифровщик\дешифровщик строки в двоичный код и наооборот
Помогите создать шифровщик\дешифровщик строки в двоичный код и наооборот

Пустой архив, подозрение на шифровщик файлов
Всем привет. В общем, бухгалтерия качнула архив, попытались его открыть, а там ничего. Открыли они по ошибке, т.к. домен, с которого...

6
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
07.08.2013, 01:36
И еще один повод обратиться сюда: мы не любим готовые решения на блюдечке
Знаю, что уже есть шифровальщики на батниках, но раз сами захотели. Изобретем свой.

Цитата Сообщение от MihaniX Посмотреть сообщение
Цветное меню выбора файлов
Не судите строго, я еще новичек...
Вы знаете, новички обычно с такими заявлениями не приходят
А за "голосовой" прогрессбар отдельное спасибо

Bash
1
2
3
4
5
6
7
8
/*
cls& @echo off
::Эмулируем голос (асинхронный запуск)
start /min cscript //nologo /e:jscript "%~f0"
pause
exit /b
 
*/new ActiveXObject("SAPI.SpVoice").Speak ("Encrypting in progress...");
ЗЫ. Работает и в Win7, и в XP. Правда на 7-ке голос понежнее (женский), XP - по-дефолту мужской металлический =)



Добавлено через 21 минуту
Теперь по поводу алгоритма шифрования.
Т.е. Вы предлагаете использовать шифровочную таблицу, где для каждого символа будет случайным образом сгенерирована замена в виде нескольких псевдослучайных символов.

Отсюда вытекают такие проблемы:
1) для каждого символа случайная последовательность должна быть уникальна. Есть 0,01 % какая-то вероятность, что сгенерируются одинаковые (решается 1-2 строками кода.):
Bash
1
2
3
4
set code=случайная последовательность символов
set used.%code%=true или что-угодно, только не пустое значение
::проверяем существует ли переменная
if defined used.сюда подставляем какую последовательность проверяем на уникальность
2) Сам процесс замены:
Этап 1)
Текст bank
а -> abc

Этап 2)
Текст babcnk
b -> qwerty
...

Здесь проблемка - заменится не только 1-ый символ, но и 3-й.
Я так понял - Ваше предложение предварительно обернуть каждый символ в проценты.

% - процентами обычно раскрывается значение переменной. Поэтому идея хорошая, но не процентами,
а к примеру возьмем какой-то неиспольуемый символ. Мне понравился этот - . Для сведения: ASC код = 182 (Hex = B6).

Итого получим текст:
¶b¶¶a¶¶n¶¶k¶
Теперь можно начинать замены:
¶a¶ -> abc
¶b¶ -> qwerty
и т.д....

Примерный код команды шифровальщика одной строки:
Bash
1
2
3
4
5
6
set text=bank
::здесь нужен код оборачивания каждого символа в знаки ¶
set text=%text:¶a¶=abc%
set text=%text:¶b¶=qwerty%
::и т.д. Выводим на экран, что получилось
echo %text%
Это все для примера. abc и qwerty - будут браться из шифровочной таблицы.

Теперь код оборачивания каждого символа в знаки ¶ (т.е. из bank -> в ¶b¶¶a¶¶n¶¶k¶ )
Здесь 2 варианта видится:
Способ 1) Читать каждый символ и последовательно формировать новую строку с добавлением в начало и в конец символа ¶ (слишком банально - и мне кажется медленнее способа № 2 на длинных строках)
Способ 2) Выделить из строки всех уникальных букв. Сделать замены уникальных букв на ¶буква¶.
Способ 3) = способу 2, но уникальные не выделять, а тупо сразу делаем замены каждой из букв алфавита.

Добавлено через 15 минут
Генератор кодировочной таблицы:

Вперед в зубы код от sov44 Генератор пароля
и можно ее легко создать обернув в цикл с алфавитом. Пример строки кода такого цикла: Перекодировщик Reversed Hex в символьную строку
Вывод в файл с дозаписью:
Bash
echo текст>>"файл"
3
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
07.08.2013, 11:56
Цитата Сообщение от Dragokas Посмотреть сообщение
Правда на 7-ке голос понежнее (женский)
Да не хотел бы я оказаться в одной комнате рядом с женщиной с таким голосом))
По теме:
Полезные VBS скрипты и программы по работе с ними
1
 Аватар для MihaniX
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
07.08.2013, 12:59  [ТС]
Спасибо большое за подсказки!

Вопрос кодировочной таблицы я планирую решить так:
-случайная комбинация букв - abc
-текстовый файл (его содержание) - a
Bash
1
set abc=a
расшифровка
Bash
1
echo %abc% >>1.txt
Значение переменной %abc% = a. Поэтому в расшифрованный файл запишутся значения переменных, т.е. изначальный текст. Именно поэтому я хочу оборачивать буквы в проценты А в шифрованном файле буквы будут заменены значениями их переменных.

Проблема в том что я не умею оборачивать буквы в проценты

Да, шифроваться будут только буквы, но мне этого в принципе достаточно. Зато потом, если шифровался батник можно сразу запускать зашифрованный файл.

FraidZZ, я хочу написать его только на BAT. Потом примусь за изучение VBScript.
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
07.08.2013, 13:36
Можно и не в проценты - будут проблемы с передачей парамеиров и т.д. Оберни, например, в квадратные скобки. Буду за компом - скину наброски.

Но скажу сразу - наложение текста на ключ - без разницы, каким способом, хоть сложением ASCII-кодов символов, хоть побитовым XOR гораздо надежнее.
0
 Аватар для MihaniX
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
07.08.2013, 21:34  [ТС]
Пока только шифровщик без дешифровки...
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@Echo Off
 
set a=*%random%*
set b=*%random%%random%*
set c=*%random%%random%%random%*
set d=*%random%%random%%random%%random%*
set e=*%random%%random%%random%%random%%random%*
set f=*%random%%random%%random%%random%%random%%random%*
set g=*%random%%random%%random%%random%%random%%random%%random%*
set h=*%random%%random%%random%%random%%random%%random%%random%%random%*
set i=*%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set g=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set k=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set l=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set m=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set n=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set o=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set p=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set q=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set r=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set s=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set t=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set u=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set v=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set w=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set x=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set y=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
set z=*%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%*
 
SetLocal EnableDelayedExpansion
:: Путь к обрабатываемой папке
Set Folder=C:\Users\SYSTEM32\Desktop\Model
 
:: Список замен
Set preset=a_%a% b_%b% c_%c% d_%d% e_%e% f_%f% g_%g% h_%h% i_%i% j_%j% k_%k% l_%l% m_%m% n_%n% o_%o% p_%p% q_%q% r_%r% s_%s% t_%t% u_%u% v_%v% w_%w% x_%x% y_%y% z_%z%
 
For /F "tokens=* delims=" %%A In ('Dir /S /B /A:-D "%folder%"') Do (
    Call :_crypt "%%~nA"
    Ren "%%A" "!Result!%%~xA"
)
Pause
Exit
 
:_crypt
Set Data=%~1
Set Data=%Data: =_%
Set Result=
:_loop
Set Char=%Data:~,1%
For %%I In (%preset%) Do For /F "tokens=1,2 delims=_" %%A In ("%%I") Do If %Char%==%%A Set Char=%%B
Set Result=%Result%%Char%
Set Data=%Data:~1%
If Defined Data GoTo _loop
GoTo :EOF
Основной текст шифровальщика взял с этого форума, тщательно изучив.
Количество переменных увеличил дабы меньше вероятности того, что попадутся одинаковые. Заключил в *а* звездочки, зашифрованные буквы, чтобы потом расшифровать.
----
Буду совершенствовать!
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
08.08.2013, 03:44
Ох. Т.е. у Вас эдакой обфускатор имен файлов получился. =)

В целом очень неплохо. (*) - хороший выбор.
Еще бы добавить if /i - это игнорирование регистра букв (в 50-ю строку).
И "закавычить" присвоения, тогда строка 46 будет не нужна. Примерно так:
Set "Char=%Data:~,1%"
...
If /i "%Char%"=="%%A"
...
Set "Result=%Result%%Char%"
Set "Data=%Data:~1%"

Советы по оптимизации скорости


Для коротких имен, которыми есть файлы Ваш алгоритм будет наиболее быстрым.
Для более длинного текста, вероятно будет лучше один из вариантов ниже:

1) вместо перебора всего алфавита для каждого символа использовать if defined (вместо строки 50)

Bash
1
if defined %Char% call set Char=%%%Char%%%
Другими словами, если переменная определена (в таблице) - дважды раскрываем ее значение.
Предупреждение: скрипт может "вылететь", если Char = пустой символ.

2) прямая замена всех букв из алфавита целиком во всей строке:

Bash
1
2
3
for %%A in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do call set "Data=%%Data:%%A=!%%A!%%"
:: тоже самое для верхнего регистра
for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do call set "Data=%%Data:%%A=!%%A!%%"
P.S. Требует EnableDelayedExpansion, что негативно влияет на скорость.

3) Более быстрый вариант (весь алфавит развернуть):
Bash
1
2
3
set "Data=!Data:a=%a%!"
set "Data=!Data:b=%b%!"
...
или так:
Bash
1
2
3
call set "Data=%%Data:a=%a%%%"
call set "Data=%%Data:b=%b%%%"
...
Даже не знаю, что быстрее. На выходных проведу тесты и добавлю сюда.
Аж стало интересно.



На счет EnableDelayedExpansion:

Он глотает (!) воскл. знаки, так что они потеряются навсегда.
Раз уж у Вас код работает через Goto, что есть верно, можно отказаться вообще от этого режима, переписав строку 39 так:
Bash
1
call Ren "%%A" "%%Result%%%%~xA"
Если все таки этот режим Вам будет нужен, можно включать его непосредственно перед использованием, после чего завершать командой EndLocal или SetLocal DisableDelayedExpansion.

На счет шифрования цифр. %1% - имеет другое значение в BAT.
Вы можете сделать их таблицу отдельным списком вида:

Bash
1
2
3
set c1=*C%random%*
set c2=*C%random%%random%*
set c3=*C%random%%random%%random%*
соответственно добавив к preset 1_%c1% 2_%c2% ...

Для дешифровщика Вам пару подсказок:

Дешифровочную таблицу Вы делаете в виде отдельного файла-подпрограммы, как я понял, вида set *%random%*=a.
Вызвать будет просто:
Bash
1
call table.cmd
Переменные окружения будут наследоваться основным батником. Главное в подпрограмме не пишите директиву SetLocal, только set-ы.

Теперь парсинг шифрованого текста на составляющие по разделителю (*):

1) Заменяем весь текст из вида *aaa**bbb**ccc* -> в "aaa" "bbb" "ccc"

А задачка-то нетривиальная.
ни так: set data=%data:*=" "%
ни так: set data=%data:^*=" "%
не получается.


Тогда по методу смещения токенов от FraidZZ-а:
Bash
1
2
3
4
5
6
7
set Data=*aaa**bbb**ccc*
:begin
for /f "tokens=1* delims=*" %%A in ("%Data%") do (
  rem Здесь код расшифровщика символа
  echo %%A
  if "%%B" neq "" (set Data=%%B& goto begin)
)
2) Теперь можно разбить через for без ключей:
Bash
for %%? in (%data%) do echo %%~?
Обратите внимание на тильду (~). Она убирает кавычки из вывода.
Все включено в 1)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.08.2013, 03:44
Помогаю со студенческими работами здесь

Создание программы с использованием текстовых файлов и файлов записи
Дан текстовый файл в котором хранится информация о 6 спорсменах. В нечетных строчкеах записаны ФИО, в четных - 6 результатов прыжков через...

Отправка файлов средствами Batch
Добрый день! Реально ли сделать батник,который шлёт файлы по электронной почте? Или просто с ПК на ПК по ип адресу?

Сохранение текстовых файлов
У меня в Tstringlist имеется к примеру 6000 строк, как сохранить допустим в три файла по 2к строк?

С использованием текстовых файлов
помогите первокурснице..... Файл содержит целые числа. Вычислить сумму значений из файла, в двоичном представлении которых K...

Перекодировка текстовых файлов
Всем привет. По курсовому проекту возник вопрос. Я попытался сначала сделать на Delphi, всё вышло. Сейчас пытаюсь сделать на С++ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru