Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 38

Случайная последовательность байт и xor

05.09.2013, 15:17. Показов 1506. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем привет. подскажите пожалуйста как на fasm'e сделать следующее: есть handle файла, необходимо с помощью функции функции GetFileSize получить его размер (с использованием второго параметра, то есть чтобы с файлами размером более 4гб тоже работало), затем сгенерировать рандом последовательность байт точно такого же размера как размер файла (тут в инете нашел различные способы, можете посоветовать какой-то минималистичный но в то же время эффективный способ?) и затем необходимо проксорить файл этой рандом последовательностью и перезаписать файл, а так же сохранить ключ. буду благодарен за подсказки и примеры...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.09.2013, 15:17
Ответы с готовыми решениями:

Случайная последовательность
Мне нужно сделать программу, которая 500 раз выведет случайную последовательность из 256 чисел от 0 до 255, не повторяя числа в...

Случайная последовательность в Acceess
Есть такая задачка: тест, вопросы... Необходимо выводить вопросы в случайном порядке. Как бы это получше сделать средствами Access'а? ...

Опять одномерный массив(случайная последовательность)
Последовательность из десяти целых чисел (как положительных, так и отрицательных) представлена в виде одномерного массива. Найти и вывести ...

7
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
05.09.2013, 17:15
Working,
невооруженным взглядом видно, что это учебное задание, показывай код СВОЕЙ программы, тогда получишь советы как ТВОЮ программу улучшить, а иначе это выпрашивание чтобы программу сделали тебе "на халяву"
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
05.09.2013, 19:08
Думаю, надо как-то так:
1. Открываем исходный файл
2. Открываем файл-приемник
3. Берем байтик из исходного файла
4. Генерим случайный байтик.
5. Ксорим байтики меж собой.
6. Отксореный пишем в источник обратно
7. Ксорящий пишем в приемник
8. Проверяем, это конец источника или нет
9. Переключаем указатели в файлах на следующий байтик.
10. Если конец, выходим из проги
11. Если не конец, прыгаем на шаг 3

А функции тупо надо передать указатель на старшую половинку восьмибайтовой переменной.
Делается это так:
Assembler
1
2
invoke GetFileSize,hFile,FileSize+4 ; или [GetFileSize], ибо я никогда для винды на фасме не писал xD
mov dword [FileSize],eax
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
06.09.2013, 12:59
Лучше смапить файл в память, а потом работать с ним как с массивом.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
06.09.2013, 15:45
sh2ezo,
invoke GetFileSizeEx,[DescrFile],Razmer

; переменные
Razmer dq 0

Цитата Сообщение от murderer Посмотреть сообщение
Лучше смапить файл в память, а потом работать с ним как с массивом.
А целиком разве смапится, если за 4 гига выйдет?
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
06.09.2013, 15:55
Цитата Сообщение от Полный 30h Посмотреть сообщение
А целиком разве смапится, если за 4 гига выйдет?
На x64 только.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2095 / 529 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
06.09.2013, 16:17
Somebody, там ещё одна засада имеется с проекцией
Если Вы отображаете сжатый или разреженный файл в разделе NTFS, то есть дополнительная возможность для ошибки ввода - вывода (I/O), когда происходит страничная подкачка в части файла. В этой ситуации, адресное пространство, отображаемое MapViewOfFile не может резервироваться распределенным дисковым пространством. Это происходит потому, что разреженный файл может иметь зоны нулей, для которых NTFS, не назначает дисковое пространство и сжатый файл может занять меньше дискового пространства, чем фактически нужно для данных, которые он представляет. Если Вы читаете из или записываете в часть разреженного или сжатого файла, который не поддерживается дисковым пространством, операционная система может сделать попытку назначить дисковое пространство. Если диск является заполненным, это может привести к исключению, указывающему на ошибку ввода - вывода (I/O).
Так что по мне проще буферок в мегабайт и чесать до победного через него. тем более что если файл будет писаться сам по себе хочешь не хочешь чтение/запись делать придётся.
1
0 / 0 / 0
Регистрация: 31.08.2013
Сообщений: 38
06.09.2013, 23:33  [ТС]
вот те наработки что уже есть, надо было сразу выложить...

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
format PE GUI 4.0
entry start
 
include 'win32a.inc'
 
section '.data' data readable writeable
 
class db 'FASMWIN32',0
title db 'Xor Crypt',0
classe db 'EDIT',0
classs db 'STATIC',0
errtxt db 'Ошибка',0
errcount db 'Вы должны перетащить в область окна 1 или 2 файла.',0
startmes db 'Перетащите в область окна файл для зашифровки, либо 2 файла (ключ и зашифрованный файл) для создания расшифрованного файла.',0
startmes2 db '',0
hwnd dd ?
hwndtext dd ? ; handle текстовой области
hwndtextinfo dd ? ; handle текстовой области
files_count dd ? ; количество файлов, с которыми работаем
filename rb 1024 ; буфер для имени файла
hfile   dd ?
nSize dd ?
lpBytesRead dd ?
lpBuffer rb 8192
 
wc WNDCLASS 0,WindowProc,0,0,0,0,0,COLOR_BTNFACE+1,0,class
 
msg MSG
 
section '.code' code readable executable
 
start:
 
invoke GetModuleHandle,0
mov [wc.hInstance],eax
invoke LoadIcon,0,IDI_APPLICATION
mov [wc.hIcon],eax
invoke LoadCursor,0,IDC_ARROW
mov [wc.hCursor],eax
invoke RegisterClass,wc
cmp eax,0
je error
 
invoke CreateWindowEx,WS_EX_ACCEPTFILES,class,title, WS_VISIBLE+WS_SYSMENU,128,128,300,250,0,0,[wc.hInstance],0
cmp eax,0
je error
mov [hwnd],eax
msg_loop:
invoke GetMessage,msg,0,0,0
cmp eax,0
je end_loop
invoke IsDialogMessage,[hwnd],msg
cmp eax,0
jne msg_loop
invoke TranslateMessage,msg
invoke DispatchMessage,msg
jmp msg_loop
 
error:
invoke MessageBox,0,errtxt,0,MB_ICONERROR+MB_OK
 
end_loop:
invoke ExitProcess,[msg.wParam]
 
proc WindowProc hwnd,wmsg,wparam,lparam
push ebx esi edi
 
cmp [wmsg],WM_CREATE
je .wmcreate
cmp [wmsg],WM_COMMAND
je .wmcommand
cmp [wmsg],WM_DESTROY
je .wmdestroy
cmp [wmsg],WM_DROPFILES
je .drop
 
.defwndproc:
invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
jmp .finish
 
.wmcreate:
invoke CreateWindowEx,0,classs,startmes,WS_VISIBLE+WS_CHILD,10,10,300,50,[hwnd],1006,[wc.hInstance],0
mov [hwndtext],eax
invoke CreateWindowEx,0,classs,startmes2,WS_VISIBLE+WS_CHILD,10,70,300,190,[hwnd],1007,[wc.hInstance],0
mov [hwndtextinfo],eax
 
 
 
jmp .finish
 
.wmcommand:
 
jmp .finish
 
 
.drop:
invoke DragQueryFile,[wparam],-1,filename,1024 ; с параметром -1 в eax пишется кол-во файлов
cmp eax,1
je .one_file
cmp eax,2
je .two_files
 
jmp .error_count
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.one_file:
; создаем ключ с расширением .key и зашифровываем этот файл с помощью этого ключа, меняем расширение на .encrypted
invoke DragQueryFile,[wparam],0,filename,1024 ; получаем имя файла
invoke  CreateFile, filename, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ; Открываем файл (чтобы получить его handle)
mov [hFile], eax ; Сохраняем handle файла в hFile
invoke  GetFileSize, [hFile], 0 ; Определяем размер файла. Так, нужно добавить второй параметр, чтобы можно было более 4гб файлы шифровать
mov [nSize], eax ;
 
; to be continued...
 
invoke CloseHandle, [hFile]
 
jmp .finish
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.two_files:
; ключем расшифровываем файл, удаляем ключ и сохраняем расшифрованный файл без расширения .encrypted
 
; to be continued...
 
jmp .finish
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.error_count:
invoke SendMessage,[hwndtextinfo],WM_SETTEXT,0,errcount
jmp .finish
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.wmdestroy:
invoke PostQuitMessage,0
mov eax,0
 
.finish:
pop edi esi ebx
ret
endp
 
section '.idata' import data readable writeable
 
library kernel32,'KERNEL32.DLL',\
shell32,'SHELL32.DLL',\
user32,'USER32.DLL'
 
include 'api\kernel32.inc'
include 'api\shell32.inc'
include 'api\user32.inc'
надеюсь что вместе ее доработаем основная идея такая: перетаскиваем файл в окно программы и шифруем файл, либо если перетаскиваем 2 то расшифровываем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.09.2013, 23:33
Помогаю со студенческими работами здесь

Случайная последовательность неповторяющихся символов алфавита
Написать программу, выводящую случайную последовательность не повторяющихся символов алфавита delphi

Случайная последовательность чисел, генерируемой rand() функцией
Как можно из псевдослучайно последовательности сделать случайную-последовательность числе, генерируемую rand() функцией?

Stdin последовательность байт
Здравствуйте, необходимо модифицировать последовательность байт приходящую в stdin и вывести в stdout. Я пока только могу представить это...

Строки. Последовательность байт
Байты. Дана строка символов. Определить, является ли она последовательностью байтов. Байт — две идущие подряд шестнадцатеричные цифры....

Преобразовать файл (4 Гб) в последовательность байт
Собственно, стоит задача преобразовать файл и посчитать кол-во 0 и 1. Программа работает, но на файл размером 4Гб уходит около 4-х минут....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 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. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru