Ну видимо у меня не получается процесс записи в файл после его создания. Я новичок в этом, поэтому помощь с этим заданием будет для меня огромной.
Описание (симметричное шифрование): 1. Кодирование a. Попросите пользователя ввести текст b. Попросите пользователя ввести закрытый ключ в пределах этого диапазона [1-255]. Выполните проверку допустимости диапазона. в. Зашифруйте входной текст с помощью предоставленного закрытого ключа, поместите зашифрованный текст в файл, названный пользователем. 2. Расшифровка а. Попросите пользователя указать файл для декодирования. б. Загрузите зашифрованный текст из этого файла и попытайтесь расшифровать его, не предполагая, что закрытый ключ тот же, что и при кодировании. в. Поместите все результаты испытаний в отдельный файл, названный пользователем. д. Выясните, каков наиболее разумный результат (или исходный открытый текст).
INCLUDE Irvine32.inc
BUFMAX = 128 ; maximum buffer size
KEYMAX = 128 ; maximum buffer size
BUFFER_SIZE = 5000
.data
sPrompt BYTE "Enter some text message: ", 0
keyPrompt BYTE "Enter a private key [1-255]: ", 0
cFile BYTE "Enter a filename for cypher text: ", 0
sEncrypt BYTE "Cypher text ", 0
sDecrypt BYTE "Decrypted: ", 0
error BYTE "The key must be within 1 - 255! ", 0
buffer BYTE BUFMAX + 1 DUP(0)
bufSize DWORD ?
keyStr BYTE KEYMAX + 1 DUP(0)
keySize DWORD ?
key DWORD ?
filename BYTE "newfile.txt ", 0
fileHdl DWORD ?
bufFile BYTE BUFFER_SIZE DUP (?)
textMsg DWORD ?
.code main PROC
call InputTheString ; input the plain text
call InputTheKey ; input the security key
call CypherFile ; input a cypher filename
;call TranslateBuffer ; encrypt the buffer
;mov edx, OFFSET sEncrypt ; display encrypted message
;call DisplayMessage
;call TranslateBuffer ; decrypt the buffer
;mov edx, OFFSET sDecrypt ; display decrypted message
;call DisplayMessage
exit
main ENDP
InputTheKey PROC
pushad ; save 32-bit registers
LK: mov edx, OFFSET keyPrompt ; display a prompt call WriteString ; Enter a private key [1-255] call Crlf ; start a new line call ReadInt ; read int into system mov key, eax ; store int into keyStr cmp eax, 255 ; compare newly read int ja LC ; jump if above 255 to LC cmp eax, 1 ; compare newly read int jb LC ; jump if below 1 to LC jmp LR ; if between range jump to LR LC: mov edx, OFFSET error ; The key must be within 1 - 255! call WriteString ; Display the error call Crlf ; start a new line loop LK ; loop back to enter the security key LR: popad ; restore the registers ret InputTheKey ENDP
CypherFile PROC pushad mov edx, OFFSET cFile ; "Enter a filename for cypher text call WriteString ; Enter a name for encrypted file call Crlf ; Start a new line mov edx, OFFSET bufFile mov ecx, BUFMAX call ReadString ; Store the filename in eax mov edx, OFFSET bufFile call CreateOutputFile ;pop eax mov eax, fileHdl mov edx, OFFSET textMsg ;mov ecx, BUFFER_SIZE call WriteToFile popad call CloseFile ret
;mov filename, eax
;mov edx, OFFSET filename
;push eax
;mov eax, fileHdl
;mov edx, OFFSET bufFile
;mov ecx, BUFFER_SIZE
;mov edx, "C:\outputtext.txt"
;mov edx, OFFSET filename
;mov ecx, SIZEOF filename
;push eax
;mov eax, bufSize
;call WriteToFile
CypherFile ENDP
InputTheString PROC
pushad ; save 32-bit registers
mov edx, OFFSET sPrompt ; display a prompt
call WriteString ; "Enter some text message"
call Crlf ; start a new line
mov ecx, BUFMAX ; maximum character count
mov edx, OFFSET buffer ; point to the buffer
call ReadString ; input the string
mov textMsg, eax
mov bufSize, eax ; save the length
popad
ret
InputTheString ENDP
DisplayMessage PROC
pushad
call WriteString
mov edx, OFFSET buffer ; display the buffer
call WriteString
call Crlf
call Crlf
popad
ret
DisplayMessage ENDP
TranslateBuffer PROC
pushad
mov ecx, bufSize ; loop counter
mov esi, 0 ; index 0 in buffer
mov edi, 0 ; index 0 in the key
L1: mov al, keyStr[edi] ; get a character from encryption key xor buffer[esi], al ; translate a byte inc esi ; point to next byte inc edi ; go to next position in key cmp edi, keySize ; compare if equal to size of the key jb L2 mov edi, 0 ; reset to beginning of the key L2: loop L1 popad ret TranslateBuffer ENDP
END main