@JKLEnot
Изучаю python, хочу научиться писать и работать с

Шифрование и дешифрование методом гаммирования в pascal, где ошибка в коде?

Нужно написать программу шифрования и дешифрования текст методом гаммирования в pascal, сам в нем не силён и начал гуглить , нашёл готовый код,кое-как закомментировал код как сам понял, но в нем где-то ошибка ,заранее огромное спасибо, код:

// Создаём переменные для работы программы
Var A, B, C: array[0..256] of longint;
G: array[0..256] of real;
i: integer;
action: byte;
z: char;
Fin, Fout, Foutout: text;
begin // Начало программы
Write('Что будем делать, шифровать(1) или дешифровать(2) файл: '); Readln(action); // Выбор между шифрованием (1) и дешифрованием (2)
case action of // Открытия case по введённому значению пользователя

1: begin // Начало шифрования
Assign(Fin, 'Fin.txt'); Reset(Fin); // Fin.txt это txt файл который хранится в дериктории с проектом в который нам нужно записать текст который хотим шифровать
Assign(Fout, 'Fout.txt'); Rewrite(Fout); // Fout.txt это txt файл который хранится в дериктории с проектом в который будет создан и в него запишется результат шифрования
Write('Введи значения А (INT): '); Readln (a[0]); // Вводим число A для шифрования
Write('Введи значения В (INT): '); Readln (b[0]); // Вводим число B для шифрования
Write('Введи значения С (INT): '); Readln (c[0]); // Вводим число C для шифрования
while not Eof(Fin) do // Цикл идет пока файл не закончится
while not eoln(Fin) do begin // Цикл идет пока строка не закончится
Read(Fin, z); // Посимвольное чтение из файла
i:= i+1; // Счётчик
a[i]:=(171*a[i-1]) mod 30269; // Операция с введённой переменной A
b[i]:=(172*b[i-1]) mod 30307; // Операция с введённой переменной B
c[i]:=(170*c[i-1]) mod 30323; // Операция с введённой переменной C
G[i]:=(a[i]/30269+b[i]/30307+c[i]/30323)*100; // Тут будет число С плавающей точкой
if G[i]>256 then G[i]:=G[i]-255; //Условие если g[i] больше 256 то g[i] равно g[i]-255
Write(Fout, chr(ord(z) xor trunc(G[i]))); // Запись файла
if Eoln(Fin) then begin Readln(Fin); Writeln(Fout); end; // Если конец строки, то читает следующую строку и записывают с новой строки
end; // Конец цикла
Close(Fin); Close(Fout); // Закрытие обоих txt файлов
end; // Конец шифрования


2: begin // Начало дешифрования
Assign(Fout, 'Fout.txt'); Reset(Fout); // Fout.txt это txt файл который хранится в дериктории с проектом в который нам нужно записать текст который хотим дешифровать
Assign(Foutout, 'Foutout.txt'); Rewrite(Foutout); // Foutout.txt это txt файл который хранится в дериктории с проектом в который будет создан и в него запишется результат дешифрования
Write('Значение А при шифровании (INT): '); Readln (a[0]); // Вводим число A которое записывали в шифровании
Write('Значение В при шифровании (INT): '); Readln (b[0]); // Вводим число B которое записывали в шифровании
Write('Значение С при шифровании (INT): '); Readln (c[0]); // Вводим число C которое записывали в шифровании
while not Eof(Fout) do // Цикл идет пока файл не закончится
while not eoln(Fout) do begin // Цикл идет пока строка не закончится
Read(Fout, z); // Посимвольное чтение из файла
i:=i+1; // Счётчик
a[i]:=(171*a[i-1]) mod 30269; // Операция с введённой переменной A
b[i]:=(172*b[i-1]) mod 30307; // Операция с введённой переменной B
c[i]:=(170*c[i-1]) mod 30323; // Операция с введённой переменной C
G[i]:=(c[i]/30323+b[i]/30307+a[i]/30269)*100; // Тут будет число С плавающей точкой
if G[i]>256 then G[i]:=G[i]-255; //Условие если g[i] больше 256 то g[i] равно g[i]-255
Write(Foutout, chr(trunc(G[i]) xor ord(z))); // Запись файла
if Eoln(Fout) then begin Readln(Fout); Writeln(Foutout); end; // Если конец строки, то читает следующую строку и записывают с новой строки
end; // Конец цикла
Close(Fout); Close(Foutout); // Закрытие обоих txt файлов
end; // Конец дешифрования
end; // Конец case
end. // Конец программы
  • Вопрос задан
  • 885 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы