Вы должны отлаживать (и смотреть) свой код, чтобы легче было отследить любую ошибку.Используйте FP IDE, это очень помогает.
Между тем, смотрите эту строку:
keystream := PRGA(S, length(plaintext));
А внутри функции PRGA смотрите эти строки:
sizeOfArray := n - 1;
SetLength(key, sizeOfArray);
Чтоздесь не так?Хорошо, предположим, что "открытый текст" имеет только 1 символ.Итак, "Длина (в незашифрованном виде)" = 1, верно?В PRGA вы делаете «sizeOfArray: = n-1;», поэтому sizeOfArray = 0. Когда вы делаете SetLength, «Key» будет иметь значение NIL, поскольку вы указываете нулевую длину индексов.Позже, в цикле, у вас есть:
key[i-1] := K;
программа не будет выполнена, потому что вы обращаетесь по индексу 0, а переменная Key равна NIL.
Осторожно: On "SetLength (key, sizeOfArray);"допустимые индексы для ключа находятся в диапазоне [0..sizeOfArray-1], но sizeOfArray должен быть как минимум 1, чтобы быть действительным (sizeOfArray> = 1).
Итак, вы должны проверить вашу функцию PRGA.Вам решать, чтобы найти окончательное решение.Не сдавайся.Удачи!