Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
1

Декодирование строки файла

16.01.2016, 16:56. Просмотров 1109. Ответов 15
Метки нет (Все метки)

Написать на языке ассемблера com-программу для декодирования сроки путем вычитания из букв сроки кодов ограниченного строки из файла.
Вообще не понятно как сделать. Помогите пожалуйста добрые люди!
TASM для DOS
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2016, 16:56
Ответы с готовыми решениями:

Считывание строки из файла до символа переноса строки
К примеру у меня есть текстовый файл, который содержит в себе несколько строчек символов. Мне надо...

Декодирование FF 06 2A 00
КОМАНДА В ПАМЯТИ ЕСЛИ ПРАВИЛЬНО ВЫРАЖАЮСЬ ЗАПИСАНА ВОТ ТАК FF 06 2A 00 При декодировании пишет...

Декодирование строки
Здравствуйте. Есть сервер на питоне на http, и клиент. С клинта на сервер отправляется такая...

Декодирование строки
Добрый день, уважаемые форумчане! Не могли бы Вы помочь в решение задачи, уже часа 3 ломаю голову...

Декодирование строки
Добрый день. У меня есть такая строка: a:1:{i:85;a:4:{s:1:"n";s:25:"Количество в упаковке,...

15
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,511
Записей в блоге: 5
16.01.2016, 17:53 2
Цитата Сообщение от Dialkord228 Посмотреть сообщение
для декодирования сроки путем вычитания из букв сроки кодов ограниченного строки из файла
..эт ты на каком языке высказываешся? Может переключишься на русский язык?
0
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
16.01.2016, 18:08  [ТС] 3
R71MT, сам не пойму что нужно сделать... В оригинале задание звучит так: Написати на мові асемблер com-програму, для розкодування строки шляхом віднімання від літер строки кодів обмеженого рядка з файлу.
0
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,511
Записей в блоге: 5
16.01.2016, 18:29 4
Цитата Сообщение от Dialkord228 Посмотреть сообщение
В оригинале задание звучит так
.. Ещё лучше!
Не пойму, у тебя файл зашифрован и ты хочешь его де/кодировать чтоли? Или наоборот закодировать? Тогда каким ключом? Ничё не понятно...

Добавлено через 3 минуты
Цитата Сообщение от Dialkord228 Посмотреть сообщение
путем вычитания из букв сроки кодов ограничения строки из файла
..наверное. Тогда ключом будет служить символы переноса строки "0Dh/0Ah". Так чтоли?
0
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
16.01.2016, 18:40  [ТС] 5
R71MT, Как я понял:
Есть какая-то строка.(Вводится с клавиатуры наверно). Есть какой-то файл(txt) в котором есть какая-то строка(думаю не важно что там будет, например: "QWERTYUIOPASDFGHJKLZXCVBNM...".). У каждой введенной буквы строки, которую мы ввели есть код(думаю номер по таблице ASCII?????).Выходит нужно отнять код введенного символа(того, что с клавиатуры) от кода символа, который есть в файле. И потом результат вывести на экран.
0
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,511
Записей в блоге: 5
16.01.2016, 20:38 6
Лучший ответ Сообщение было отмечено Dialkord228 как решение

Решение

Плохо понял, что тебе надо, но написать обычный криптор - проще/простого..
Алгоритм удобней реализовать через "XOR", т.к. эта операция обратима. То есть повторное её/использование возвращает байты в исходное значение. В коде ниже я применил именно такую тактику, и тупо про-ксорил все байты файла. Если надо именно отнимать, то замени в строке(62) "XOR" на "SUB".

Имя файла для обработки задаётся с клавиатуры в окне программы, как и ключ шифрования в 16-тиричном формате (1 байт). На выходе - создаётся зашифрованный файл "DATFILE.TXT". Как уже говорилось, если при повторном запуске указать имя файла "DATFILE.TXT" и прежний ключ, то файл расшифруется и примет исходный вид:

Пример окна:
Код
   READ FILE NAME......: TEXT.TXT
<--OK!  file size......: 82

   CRYPT MASK (byte)...: E7
<--OPERATION COMPLETED!
-----------------------------
   CREATE "DATFILE.TXT" - OK!
Assembler
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
ORG 100h
JMP start
 
mess0  DB  13,10,'   READ FILE NAME......: $'
mess1  DB  13,10,'<--OK!  file size......: $'
mess2  DB  13,10,10,'   CRYPT MASK (byte)...: $'
mess3  DB  13,10,'<--OPERATION COMPLETED!$'
mess4  DB  13,10,'-----------------------------'
       DB  13,10,'   CREATE "DATFILE.TXT" - OK!$'
 
buff   DB  1024 DUP(0)     ; буфер для файла
fName  DB  16   DUP(0)     ; имя файла (в формате 8.3)
fSize  DW  0
key    DB  0
 
start:
   MOV   DX,mess0
   CALL  MESSAGE
;------------------- юзер вводит имя файла,
;------------------- а мы его сохраняем --------------------------//
   MOV   DI,fName          ; DI для STOSB...
fileName:                  ;
   MOV   AH,1              ;
   INT   21h               ; читаем символ
   CMP   AL,13             ; выход по ENTER
   JE    next              ;
   STOSB                   ; пишем символы в "ФайлНэйм"
   JMP   fileName          ;
next:                      ;
 
   MOV   AX,3D02h          ; открыть файл! -----------------------//
   MOV   DX,fName          ;
   INT   21h               ;
   JC    error             ; ошибка?
   XCHG  AX,BX             ; дескриптор файла в ВХ
   MOV   AH,3Fh            ; читать файл! ------------------------//
   MOV   DX,buff           ;    куда,
   MOV   CX,0FFFFh         ;       и сколько
   INT   21h               ;
   JC    error             ;
   MOV   [fSize],AX        ; размер файла в переменной
   MOV   AH,3Eh            ; fucking file! -----------------------//
   INT   21h               ;
   JC    error             ;
 
   MOV   DX,mess1          ; покажем ОК! -------------------------//
   CALL  MESSAGE           ;
   MOV   AX,[fSize]        ; ..с размером файла
   MOV   BX,10             ;     в 10-тичной системе
   CALL  HEX2ASC           ;
 
   MOV   DX,mess2          ; запрос на ввод ключа шифрования -----//
   CALL  MESSAGE           ;
   CALL  ASC2HEX           ;
   MOV   [key],CL          ; ключ в переменной
 
   MOV   CX,[fSize]        ; ..байтов для шифрования
   MOV   SI,buff           ; источник
   MOV   BL,[key]          ; ключ шифрования
crypt:                     ;
   MOV   AL,BYTE[SI]       ; берём байт
   XOR   AL,BL             ; "ксорим" его ключом
   MOV   BYTE[SI],AL       ; и записываем обратно на место
   INC   SI                ; следующий байт..
   LOOP  crypt             ;
 
   MOV   DX,mess3          ; мессага ОК!
   CALL  MESSAGE           ;
   CALL  @f                ; создаём новый файл ------------------//
   DB    'DATFILE.TXT',0   ;
@@:                        ;
   MOV   AH,3Ch            ;
   POP   DX                ; имя файла в DX
   MOV   CX,20h            ; атрибут - архивный
   INT   21h               ;
   JC    error
   XCHG  BX,AX             ; дескриптор файла в BX
 
   MOV   AH,40h            ; запись в файл -----------------------//
   MOV   DX,buff           ;
   MOV   CX,[fSize]        ; кол-во выводимым символов
   INT   21h               ;
   JC    error             ;
   MOV   AH,3Eh            ; fucking file! -----------------------//
   INT   21h
   MOV   DX,mess4          ; мессага "Создали Файл!"
   CALL  MESSAGE           ;
   JMP   exit              ;
 
error:                     ; обработка ошибки --------------------//
   CALL  @f
   DB    13,10,7,'<--ERROR FILE OPERATION!$'
@@:                        ;
   POP   DX                ;
   CALL  MESSAGE           ;
 
exit:
   XOR   AX,AX             ; выход!
   INT   16h               ;
   INT   20h               ;
 
;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
MESSAGE:
   MOV   AH,9
   INT   21h
RET
 
;//======= ФУНКЦИЯ ВЫВОДИТ НА ЭКРАН В РАЗЛИЧНЫХ СС ================|
HEX2ASC:
   PUSHA                   ; перевод из HEX в ASCII и вывод на экран
   XOR   CX,CX             ;  вход: BX = система счисления, AX = число
isDiv:                     ; выход: на экране
   XOR   DX,DX             ;
   DIV   BX                ;
   PUSH  DX                ;
   INC   CX                ;
   OR    AX,AX             ;
   JNZ   isDiv             ;
isOut:                     ;
   POP   AX                ;
   CMP   AL,9              ;
   JLE   noHex             ;
   ADD   AL,7              ; коррекция для HEX..
noHex:                     ;
   ADD   AL,30h            ;
   INT   29h               ; выводим символ на экран
   LOOP  isOut             ;
   POPA                    ;
RET
 
;//========= ПРОЦЕДУРА СОХРАНЕНИЯ ВВОДА В HEX-ФОРМАТЕ =============|
ASC2HEX:
   XOR    CX,CX            ; выход: CX = число
@0:                        ;
   MOV    AH,1             ; ввод с эхом
   INT    21h              ;
   CMP    AL,13            ; выход по ENTER
   JE     stop             ;
   SUB    AL,30h           ;
   CMP    AL,9             ;
   JBE    @2               ;
   SUB    AL,11h           ; значит HEX-буква. Отнимаем от неё фактор
   CMP    AL,5             ; если заглавная буква, то остаток будет
   JBE    @1               ; в пределах(5). Ниже/равно - коррекция!
   SUB    AL,20h           ; значит прописная буква. Коррекция..
@1:                        ;
   ADD    AL,10            ; коррекция букв "A..F", в "11..15"
@2:                        ;
   SHL    CX,4             ; сдвигаем мл.тетраду(CL), в старшую
   OR     CL,AL            ; в мл.тетраду(CL) запишем наше число
   JMP    @0               ;
stop:                      ; результат в CX.
RET
1
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
16.01.2016, 20:51  [ТС] 7
R71MT, Спасибо большое! Буду сидеть разбираться)
0
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,511
Записей в блоге: 5
16.01.2016, 21:57 8
Цитата Сообщение от Dialkord228 Посмотреть сообщение
Спасибо большое!
..зачем говорить, когда для этого есть кнопка?
0
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
17.01.2016, 00:17  [ТС] 9
R71MT, Забыл)

Добавлено через 1 минуту
R71MT, Ой а можно еще вопрос. Как код переделать под TASM?для DOS
0
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
17.01.2016, 00:51  [ТС] 10
R71MT,
Пытался скомпилировать, выбило кучу ошибок
Assembler
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
.model tiny
.code
ORG 100h
JMP start
 
mess0  DB  13,10,'   READ FILE NAME......: $'
mess1  DB  13,10,'<--OK!  file size......: $'
mess2  DB  13,10,10,'   CRYPT MASK (byte)...: $'
mess3  DB  13,10,'<--OPERATION COMPLETED!$'
mess4  DB  13,10,'-----------------------------'
       DB  13,10,'   CREATE "DATFILE.TXT" - OK!$'
 
buff   DB  1024 DUP(0)     ; буфер для файла
fName  DB  16   DUP(0)     ; имя файла (в формате 8.3)
fSize  DW  0
key    DB  0
 
start:
   MOV   DX,mess0
   CALL  MESSAGE
;------------------- юзер вводит имя файла,
;------------------- а мы его сохраняем --------------------------//
   MOV   DI,fName          ; DI для STOSB...
fileName:                  ;
   MOV   AH,1              ;
   INT   21h               ; читаем символ
   CMP   AL,13             ; выход по ENTER
   JE    next              ;
   STOSB                   ; пишем символы в "ФайлНэйм"
   JMP   fileName          ;
next:                      ;
 
   MOV   AX,3D02h          ; открыть файл! -----------------------//
   MOV   DX,fName          ;
   INT   21h               ;
   JC    error             ; ошибка?
   XCHG  AX,BX             ; дескриптор файла в ВХ
   MOV   AH,3Fh            ; читать файл! ------------------------//
   MOV   DX,buff           ;    куда,
   MOV   CX,0FFFFh         ;       и сколько
   INT   21h               ;
   JC    error             ;
   MOV   [fSize],AX        ; размер файла в переменной
   MOV   AH,3Eh            ; fucking file! -----------------------//
   INT   21h               ;
   JC    error             ;
 
   MOV   DX,mess1          ; покажем ОК! -------------------------//
   CALL  MESSAGE           ;
   MOV   AX,[fSize]        ; ..с размером файла
   MOV   BX,10             ;     в 10-тичной системе
   CALL  HEX2ASC           ;
 
   MOV   DX,mess2          ; запрос на ввод ключа шифрования -----//
   CALL  MESSAGE           ;
   CALL  ASC2HEX           ;
   MOV   [key],CL          ; ключ в переменной
 
   MOV   CX,[fSize]        ; ..байтов для шифрования
   MOV   SI,buff           ; источник
   MOV   BL,[key]          ; ключ шифрования
crypt:                     ;
   MOV   AL,BYTE[SI]       ; берём байт
   XOR   AL,BL             ; "ксорим" его ключом
   MOV   BYTE[SI],AL       ; и записываем обратно на место
   INC   SI                ; следующий байт..
   LOOP  crypt             ;
 
   MOV   DX,mess3          ; мессага ОК!
   CALL  MESSAGE           ;
   CALL  @f                ; создаём новый файл ------------------//
   DB    'DATFILE.TXT',0   ;
@@:                        ;
   MOV   AH,3Ch            ;
   POP   DX                ; имя файла в DX
   MOV   CX,20h            ; атрибут - архивный
   INT   21h               ;
   JC    error
   XCHG  BX,AX             ; дескриптор файла в BX
 
   MOV   AH,40h            ; запись в файл -----------------------//
   MOV   DX,buff           ;
   MOV   CX,[fSize]        ; кол-во выводимым символов
   INT   21h               ;
   JC    error             ;
   MOV   AH,3Eh            ; fucking file! -----------------------//
   INT   21h
   MOV   DX,mess4          ; мессага "Создали Файл!"
   CALL  MESSAGE           ;
   JMP   exit              ;
 
error:                     ; обработка ошибки --------------------//
   CALL  @f
   DB    13,10,7,'<--ERROR FILE OPERATION!$'
@@:                        ;
   POP   DX                ;
   CALL  MESSAGE           ;
 
exit:
   XOR   AX,AX             ; выход!
   INT   16h               ;
   INT   20h               ;
 
;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
MESSAGE:
   MOV   AH,9
   INT   21h
RET
 
;//======= ФУНКЦИЯ ВЫВОДИТ НА ЭКРАН В РАЗЛИЧНЫХ СС ================|
HEX2ASC:
   PUSHA                   ; перевод из HEX в ASCII и вывод на экран
   XOR   CX,CX             ;  вход: BX = система счисления, AX = число
isDiv:                     ; выход: на экране
   XOR   DX,DX             ;
   DIV   BX                ;
   PUSH  DX                ;
   INC   CX                ;
   OR    AX,AX             ;
   JNZ   isDiv             ;
isOut:                     ;
   POP   AX                ;
   CMP   AL,9              ;
   JLE   noHex             ;
   ADD   AL,7              ; коррекция для HEX..
noHex:                     ;
   ADD   AL,30h            ;
   INT   29h               ; выводим символ на экран
   LOOP  isOut             ;
   POPA                    ;
RET
 
;//========= ПРОЦЕДУРА СОХРАНЕНИЯ ВВОДА В HEX-ФОРМАТЕ =============|
ASC2HEX:
   XOR    CX,CX            ; выход: CX = число
@0:                        ;
   MOV    AH,1             ; ввод с эхом
   INT    21h              ;
   CMP    AL,13            ; выход по ENTER
   JE     stop             ;
   SUB    AL,30h           ;
   CMP    AL,9             ;
   JBE    @2               ;
   SUB    AL,11h           ; значит HEX-буква. Отнимаем от неё фактор
   CMP    AL,5             ; если заглавная буква, то остаток будет
   JBE    @1               ; в пределах(5). Ниже/равно - коррекция!
   SUB    AL,20h           ; значит прописная буква. Коррекция..
@1:                        ;
   ADD    AL,10            ; коррекция букв "A..F", в "11..15"
@2:                        ;
   SHL    CX,4             ; сдвигаем мл.тетраду(CL), в старшую
   OR     CL,AL            ; в мл.тетраду(CL) запишем наше числ
   JMP    @0               ;
stop:                      ; результат в CX.
RET
end start
0
Миниатюры
Декодирование строки файла  
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
17.01.2016, 12:14  [ТС] 11
R71MT, чуть исправил, но 3 ошибки всё еще выдает, информации по исправлению так и не нашел...
Assembler
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
.model tiny
.code
ORG 100h
.386
start:
   MOV   DX,offset mess0
   CALL  MESSAGE
;------------------- юзер вводит имя файла,
;------------------- а мы его сохраняем --------------------------//
   MOV   DI,offset fName          ; DI для STOSB...
fileName:                  ;
   MOV   AH,1              ;
   INT   21h               ; читаем символ
   CMP   AL,13             ; выход по ENTER
   JE    next              ;
   STOSB                   ; пишем символы в "ФайлНэйм"
   JMP   fileName          ;
next:                      ;
 
   MOV   AX,3D02h          ; открыть файл! -----------------------//
   MOV   DX,offset fName          ;
   INT   21h               ;
   JC    error             ; ошибка?
   XCHG  AX,BX             ; дескриптор файла в ВХ
   MOV   AH,3Fh            ; читать файл! ------------------------//
   MOV   DX,offset buff           ;    куда,
   MOV   CX,0FFFFh         ;       и сколько
   INT   21h               ;
   JC    error             ;
   MOV   [fSize],AX        ; размер файла в переменной
   MOV   AH,3Eh            ; fucking file! -----------------------//
   INT   21h               ;
   JC    error             ;
 
   MOV   DX,offset mess1          ; покажем ОК! -------------------------//
   CALL  MESSAGE           ;
   MOV   AX,[fSize]        ; ..с размером файла
   MOV   BX,10             ;     в 10-тичной системе
   CALL  HEX2ASC           ;
 
   MOV   DX,offset mess2          ; запрос на ввод ключа шифрования -----//
   CALL  MESSAGE           ;
   CALL  ASC2HEX           ;
   MOV   [key],CL          ; ключ в переменной
 
   MOV   CX,[fSize]        ; ..байтов для шифрования
   MOV   SI,offset buff           ; источник
   MOV   BL,[key]          ; ключ шифрования
crypt:                     ;
   MOV   AL,BYTE[SI]       ; берём байт
   XOR   AL,BL             ; "ксорим" его ключом
   MOV   BYTE[SI],AL       ; и записываем обратно на место
   INC   SI                ; следующий байт..
   LOOP  crypt             ;
 
   MOV   DX,offset mess3          ; мессага ОК!
   CALL  MESSAGE           ;
   CALL  @f                ; создаём новый файл ------------------//
   DB    'DATFILE.TXT',0   ;
@@:                        ;
   MOV   AH,3Ch            ;
   POP   DX                ; имя файла в DX
   MOV   CX,20h            ; атрибут - архивный
   INT   21h               ;
   JC    error
   XCHG  BX,AX             ; дескриптор файла в BX
 
   MOV   AH,40h            ; запись в файл -----------------------//
   MOV   DX,offset buff           ;
   MOV   CX,[fSize]        ; кол-во выводимым символов
   INT   21h               ;
   JC    error             ;
   MOV   AH,3Eh            ; fucking file! -----------------------//
   INT   21h
   MOV   DX,offset mess4          ; мессага "Создали Файл!"
   CALL  MESSAGE           ;
   JMP   exit              ;
 
error:                     ; обработка ошибки --------------------//
   CALL  @f
   DB    13,10,7,'<--ERROR FILE OPERATION!$'
@@:                        ;
   POP   DX                ;
   CALL  MESSAGE           ;
 
exit:
   XOR   AX,AX             ; выход!
   INT   16h               ;
   INT   20h               ;
 
;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
MESSAGE:
   MOV   AH,9
   INT   21h
RET
 
;//======= ФУНКЦИЯ ВЫВОДИТ НА ЭКРАН В РАЗЛИЧНЫХ СС ================|
HEX2ASC:
   PUSHA                   ; перевод из HEX в ASCII и вывод на экран
   XOR   CX,CX             ;  вход: BX = система счисления, AX = число
isDiv:                     ; выход: на экране
   XOR   DX,DX             ;
   DIV   BX                ;
   PUSH  DX                ;
   INC   CX                ;
   OR    AX,AX             ;
   JNZ   isDiv             ;
isOut:                     ;
   POP   AX                ;
   CMP   AL,9              ;
   JLE   noHex             ;
   ADD   AL,7              ; коррекция для HEX..
noHex:                     ;
   ADD   AL,30h            ;
   INT   29h               ; выводим символ на экран
   LOOP  isOut             ;
   POPA                    ;
RET
 
;//========= ПРОЦЕДУРА СОХРАНЕНИЯ ВВОДА В HEX-ФОРМАТЕ =============|
ASC2HEX:
   XOR    CX,CX            ; выход: CX = число
@0:                        ;
   MOV    AH,1             ; ввод с эхом
   INT    21h              ;
   CMP    AL,13            ; выход по ENTER
   JE     stop             ;
   SUB    AL,30h           ;
   CMP    AL,9             ;
   JBE    @2               ;
   SUB    AL,11h           ; значит HEX-буква. Отнимаем от неё фактор
   CMP    AL,5             ; если заглавная буква, то остаток будет
   JBE    @1               ; в пределах(5). Ниже/равно - коррекция!
   SUB    AL,20h           ; значит прописная буква. Коррекция..
@1:                        ;
   ADD    AL,10            ; коррекция букв "A..F", в "11..15"
@2:                        ;
   SHL    CX,4             ; сдвигаем мл.тетраду(CL), в старшую
   OR     CL,AL            ; в мл.тетраду(CL) запишем наше числ
   JMP    @0               ;
stop:                      ; результат в CX.
RET
mess0  DB  13,10,'   READ FILE NAME......: $'
mess1  DB  13,10,'<--OK!  file size......: $'
mess2  DB  13,10,10,'   CRYPT MASK (byte)...: $'
mess3  DB  13,10,'<--OPERATION COMPLETED!$'
mess4  DB  13,10,'-----------------------------'
       DB  13,10,'   CREATE "DATFILE.TXT" - OK!$'
 
buff   DB  1024 DUP(0)     ; буфер для файла
fName  DB  16   DUP(0)     ; имя файла (в формате 8.3)
fSize  DW  0
key    DB  0
end start
0
Миниатюры
Декодирование строки файла  
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
17.01.2016, 12:53  [ТС] 12
R71MT, всё, поправил.

Добавлено через 21 минуту
R71MT, Извините что надоедаю, но когда я задаю ключ шифрования(допустим такой как указывали вы E7), то когда меняю XOR на SUB. файл почему-то не приобретает прежний вид...
P.S Как я поправил код, чтобы скомпилировало:
Assembler
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
.model tiny
.code
ORG 100h
.386
start:
   MOV   DX,offset mess0
   CALL  MESSAGE
;------------------- юзер вводит имя файла,
;------------------- а мы его сохраняем --------------------------//
   MOV   DI,offset fName          ; DI для STOSB...
fileName:                  ;
   MOV   AH,1              ;
   INT   21h               ; читаем символ
   CMP   AL,13             ; выход по ENTER
   JE    next              ;
   STOSB                   ; пишем символы в "ФайлНэйм"
   JMP   fileName          ;
next:                      ;
 
   MOV   AX,3D02h          ; открыть файл! -----------------------//
   MOV   DX,offset fName          ;
   INT   21h               ;
   JC    error             ; ошибка?
   XCHG  AX,BX             ; дескриптор файла в ВХ
   MOV   AH,3Fh            ; читать файл! ------------------------//
   MOV   DX,offset buff           ;    куда,
   MOV   CX,0FFFFh         ;       и сколько
   INT   21h               ;
   JC    error             ;
   MOV   [fSize],AX        ; размер файла в переменной
   MOV   AH,3Eh            ; fucking file! -----------------------//
   INT   21h               ;
   JC    error             ;
 
   MOV   DX,offset mess1          ; покажем ОК! -------------------------//
   CALL  MESSAGE           ;
   MOV   AX,[fSize]        ; ..с размером файла
   MOV   BX,10             ;     в 10-тичной системе
   CALL  HEX2ASC           ;
 
   MOV   DX,offset mess2          ; запрос на ввод ключа шифрования -----//
   CALL  MESSAGE           ;
   CALL  ASC2HEX           ;
   MOV   [key],CL          ; ключ в переменной
 
   MOV   CX,[fSize]        ; ..байтов для шифрования
   MOV   SI,offset buff           ; источник
   MOV   BL,[key]          ; ключ шифрования
crypt:                     ;
   MOV   AL,BYTE[SI]       ; берём байт
   XOR   AL,BL             ; "ксорим" его ключом<------------------------------------------------XOR\SUB
   MOV   BYTE[SI],AL       ; и записываем обратно на место
   INC   SI                ; следующий байт..
   LOOP  crypt             ;
 
   MOV   DX,offset mess3          ; мессага ОК!
   CALL  MESSAGE           ;
   CALL  @@01                ; создаём новый файл ------------------//
   DB    'DATFILE.TXT',0   ;
@@01:                        ;
   MOV   AH,3Ch            ;
   POP   DX                ; имя файла в DX
   MOV   CX,20h            ; атрибут - архивный
   INT   21h               ;
   JC    error
   XCHG  BX,AX             ; дескриптор файла в BX
 
   MOV   AH,40h            ; запись в файл -----------------------//
   MOV   DX,offset buff           ;
   MOV   CX,[fSize]        ; кол-во выводимым символов
   INT   21h               ;
   JC    error             ;
   MOV   AH,3Eh            ; fucking file! -----------------------//
   INT   21h
   MOV   DX,offset mess4          ; мессага "Создали Файл!"
   CALL  MESSAGE           ;
   JMP   exit              ;
 
error:                     ; обработка ошибки --------------------//
   CALL  @@@
   DB    13,10,7,'<--ERROR FILE OPERATION!$'
@@@:                        ;
   POP   DX                ;
   CALL  MESSAGE           ;
 
exit:
   XOR   AX,AX             ; выход!
   INT   16h               ;
   INT   20h               ;
 
;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
MESSAGE:
   MOV   AH,9
   INT   21h
RET
 
;//======= ФУНКЦИЯ ВЫВОДИТ НА ЭКРАН В РАЗЛИЧНЫХ СС ================|
HEX2ASC:
   PUSHA                   ; перевод из HEX в ASCII и вывод на экран
   XOR   CX,CX             ;  вход: BX = система счисления, AX = число
isDiv:                     ; выход: на экране
   XOR   DX,DX             ;
   DIV   BX                ;
   PUSH  DX                ;
   INC   CX                ;
   OR    AX,AX             ;
   JNZ   isDiv             ;
isOut:                     ;
   POP   AX                ;
   CMP   AL,9              ;
   JLE   noHex             ;
   ADD   AL,7              ; коррекция для HEX..
noHex:                     ;
   ADD   AL,30h            ;
   INT   29h               ; выводим символ на экран
   LOOP  isOut             ;
   POPA                    ;
RET
 
;//========= ПРОЦЕДУРА СОХРАНЕНИЯ ВВОДА В HEX-ФОРМАТЕ =============|
ASC2HEX:
   XOR    CX,CX            ; выход: CX = число
@0:                        ;
   MOV    AH,1             ; ввод с эхом
   INT    21h              ;
   CMP    AL,13            ; выход по ENTER
   JE     stop             ;
   SUB    AL,30h           ;
   CMP    AL,9             ;
   JBE    @2               ;
   SUB    AL,11h           ; значит HEX-буква. Отнимаем от неё фактор
   CMP    AL,5             ; если заглавная буква, то остаток будет
   JBE    @1               ; в пределах(5). Ниже/равно - коррекция!
   SUB    AL,20h           ; значит прописная буква. Коррекция..
@1:                        ;
   ADD    AL,10            ; коррекция букв "A..F", в "11..15"
@2:                        ;
   SHL    CX,4             ; сдвигаем мл.тетраду(CL), в старшую
   OR     CL,AL            ; в мл.тетраду(CL) запишем наше числ
   JMP    @0               ;
stop:                      ; результат в CX.
RET
mess0  DB  13,10,'   READ FILE NAME......: $'
mess1  DB  13,10,'<--OK!  file size......: $'
mess2  DB  13,10,10,'   CRYPT MASK (byte)...: $'
mess3  DB  13,10,'<--OPERATION COMPLETED!$'
mess4  DB  13,10,'-----------------------------'
       DB  13,10,'   CREATE "DATFILE.TXT" - OK!$'
 
buff   DB  1024 DUP(0)     ; буфер для файла
fName  DB  16   DUP(0)     ; имя файла (в формате 8.3)
fSize  DW  0
key    DB  0
end start
0
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,511
Записей в блоге: 5
17.01.2016, 14:51 13
Цитата Сообщение от Dialkord228 Посмотреть сообщение
то когда меняю XOR на SUB. файл почему-то не приобретает прежний вид...
..если при кодировании ты отнимал Е7, то при де/кодировании должен прибавлять Е7.
0
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
17.01.2016, 18:17  [ТС] 14
R71MT, я так и сделал, но прежний вид не приобрёл файл... Посмотрите код пожалуйста, может я когда исправлял, намудрил чего.
0
R71MT
5309 / 1470 / 313
Регистрация: 29.07.2014
Сообщений: 2,511
Записей в блоге: 5
17.01.2016, 21:26 15
Вот тебе такой-же пример шифрования XOR'ом.
Ключ запрашивается 2 раза: для шифрования и для расшифровки.
Попробуй ввести одинаковые/разные ключи и посмотришь, что получится...

Код несёт в себе чисто информативную нагрузку.
В реале - KEY можно генерировать с серийника диска, имени компа/юзера и т.д., по-ходу снимая с них хэш или CRC. В итоге - каждая машина будет иметь "свой" ключ. Но это для проверки: свой/чужой.

Пример окна:
Код
 ENTER STRING: This is test string. Example crypt. Bye-Bye! <==== 2016
 ENTER KEY...: %
 ==================
 CRYPT STRING: qMLV¦LV¦Q@VQ¦VQWLKB>¦`]DHUI@¦FW\UQ>¦g\g\@¦¦v^^^^¦¦§¶!
 ENTER KEY...: %
 ==================
 CRYPT STRING: This is test string. Example crypt. Bye-Bye! <==== 2016
Assembler
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
55
56
57
58
59
60
61
62
63
64
65
ORG 100h
JMP start
 
mess0   DB  13,10,' ENTER STRING: $'
mess1   DB  13,10,' ENTER KEY...: $'
mess2   DB  13,10,' =================='
        DB  13,10,' CRYPT STRING: $'
buff    DB  80,0,80 DUP(0)
key     DB  0
 
start:
   MOV   DX,mess0          ;
   CALL  MESSAGE           ;
   MOV   AH,0Ah            ; вводим строку
   MOV   DX,buff           ;
   INT   21h               ;
 
   MOV   DX,mess1          ;
   CALL  MESSAGE           ;
   MOV   AH,1              ; вводим ключ кодирования
   INT   21h               ;
   MOV   [key],AL          ; сохраняем,
   CALL  CRYPT_DECRYPT     ;     и шифруем им строку (XOR)
 
   MOV   DX,mess1          ;
   CALL  MESSAGE           ;
   MOV   AH,1              ; вводим ключ де/кодирования
   INT   21h               ;
   MOV   [key],AL          ;
   CALL  CRYPT_DECRYPT     ; расшифровываем им строку
 
exit:
   XOR   AX,AX             ; ABORT!
   INT   16h
   INT   20h
;НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
MESSAGE:                   ;
   MOV   AH,9              ;
   INT   21h               ;
RET                        ;
 
CRYPT_DECRYPT:             ;
   MOV   DX,mess2          ;
   CALL  MESSAGE           ;
   MOV   SI,buff+2         ; начало строки в буфере
   MOV   CL,[buff+1]       ; её длинна
   XOR   CH,CH             ;
   PUSH  SI CX             ; запомним их в стеке
   MOV   BL,[key]          ; ключ в BL
crypt:                     ;
   MOV   AL,BYTE[SI]       ;
   XOR   AL,BL             ; шифруем байт,
   MOV   BYTE[SI],AL       ;    с перезаписью
   INC   SI                ; сл.байт...
   DEC   CX                ;
   OR    CX,CX             ; последний символ?
   JZ    print             ;
   JMP   crypt             ;
print:                     ;
   POP   CX SI             ; снимаем позицию с длиной
@1:                        ;
   LODSB                   ;
   INT   29h               ; выводим шиврованную строку из буфера
   LOOP  @1                ;
RET
1
Dialkord228
5 / 5 / 4
Регистрация: 30.11.2015
Сообщений: 107
Завершенные тесты: 1
17.01.2016, 23:02  [ТС] 16
R71MT, спасибо, буду пробовать
0
17.01.2016, 23:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2016, 23:02

Декодирование файла
Здравствуйте! У меня в файле сохраняется результат платежа в виде строки как мне переделать этот...

Декодирование строки из URL
Подскажыте есть ли аналог функцыи в С++ Builder Синтаксис: string urldecode (string str)...

Декодирование PHP файла
Всем привет! Недавно столкнулся с необходимостью расшифровать PHP файл, который закодировали...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru