информация зашифрована в виде последовательности положительных чисел в которой отношение послед

Информация зашифрована в виде последовательности положительных чисел в которой отношение послед

По каналу связи передаются данные в виде последовательности положительных целых чисел. Количество чисел заранее неизвестно, но не менее двух, признаком конца данных считается число 0. После данных передаётся контрольное значение. Оно равно такому максимально возможному произведению двух чисел из переданного набора, которое делится на 7, но не делится на 49. Если такое произведение получить нельзя, контрольное значение считается равным 1.

Напишите эффективную, в том числе по памяти, программу, которая будет моделировать процесс приёма данных. Программа должна ввести все числа и контрольное значение и напечатать краткий отчёт, включающий количество принятых чисел, принятое контрольное значение, вычисленное контрольное значение и вывод о совпадении значений. Перед текстом программы кратко опишите алгоритм решения задачи и укажите используемый язык программирования и его версию.

Вам предлагаются два задания, связанные с этой задачей: задание А и задание Б. Вы можете решать оба задания А и Б или одно из них по своему выбору.

Итоговая оценка выставляется как максимальная из оценок за задания А и Б. Если решение одного из заданий не представлено, то считается, что оценка за это задание составляет 0 баллов.

Задание Б является усложненным вариантом задания А, оно содержит дополнительные требования к программе. Перед программой укажите версию языка программирования.

А. Напишите на любом языке программирования программу для решения поставленной задачи, в которой входные данные будут запоминаться в массиве, после чего будут проверены все возможные пары элементов.

Обязательно укажите, что программа является решением задания А.

Максимальная оценка за выполнение задания А – 2 балла.

Б. Напишите программу для решения поставленной задачи, которая будет эффективна как по времени, так и по памяти (или хотя бы по одной из этих характеристик).

Программа считается эффективной по времени, если время работы программы пропорционально количеству элементов последовательности N, т.е. при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз. Обязательно укажите, что программа является решением задания Б.

Описание входных данных.

В каждой строке исходных данных содержится одно целое число. Сначала идут строки с основными данными — положительными числами, затем число 0 (признак окончания данных), в последней строке — контрольное значение.

Программа должна вывести отчёт по форме, приведённой ниже в примере.

Источник

Информация зашифрована в виде последовательности положительных чисел в которой отношение послед

По каналу связи передаётся последовательность положительных целых чисел, все числа не превышают 1000. Количество чисел известно, но может быть очень велико. Затем передаётся контрольное значение последовательности — наибольшее число R, удовлетворяющее следующим условиям:

1) R — произведение двух различных переданных элементов последовательности («различные» означает, что не рассматриваются квадраты переданных чисел, произведения различных элементов последовательности, равных по величине, допускаются);

Если такого числа R нет, то контрольное значение полагается равным 0. В результате помех при передаче как сами числа, так и контрольное значение могут быть искажены.

Напишите эффективную, в том числе по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет проверять правильность контрольного значения. Программа должна напечатать отчёт по следующей форме:

Контроль пройден (или — Контроль не пройден)

Перед текстом программы кратко опишите используемый Вами алгоритм решения.

На вход программе в первой строке подаётся количество чисел N. В каждой из последующих N строк записано одно натуральное число, не превышающее 1000. В последней строке записано контрольное значение.

Пример входных данных:

Пример выходных данных для приведённого выше примера входных данных:

Вычисленное контрольное значение: 33000

Произведение двух чисел делится на 33, если:

· один из сомножителей делится на 33 (второй может быть любым) либо

· ни один из сомножителей не делится на 33, причём один из сомножителей делится на 11, а другой — на 3.

Поэтому программа, вычисляющая кодовое число, может работать так. Программа читает все входные данные один раз, не запоминая все данные в массиве. Программа для прочитанного фрагмента входной последовательности хранит значения четырёх величин: M11 — самое большое число, кратное 11, но не кратное 3; М3 — самое большое число, кратное 3, но не кратное 11; М33 — самое большое число, кратное 33; МАХ — самое большое число среди всех элементов последовательности, отличное от М33 (если число М33 встретилось более одного раза и оно же является максимальным, то МАХ = М33).

После того как все данные прочитаны, искомое контрольное значение вычисляется как максимум из произведений М33*МАХ и M11*М3. Ниже приведён пример программы на языке Паскаль, которая реализует описанный алгоритм. Кроме того, приведён пример программы на языке Бейсик, которая правильно решает задачу, но использует алгоритм, немного отличающийся от описанного выше. Возможны и другие правильные алгоритмы. Допускаются решения, записанные на других языках программирования.

IF DAT MOD 11 = 0 AND DAT > M11 THEN

IF DAT MOD 3=0 AND DAT > M3 THEN

IF DAT MOD 33 = 0 AND DAT > M33 THEN

IF M3 * M11 0) and (dat > M11) then

if ((dat mod 3) = 0) and ((dat mod 11) > 0) and (dat > М3) then

if (dat mod 33 = 0) and (dat > M33) then

if M33 > MAX then MAX := M33;

Приводим эффективное решение Игоря Кудашева на Python 3.

if x % 33 == 0 and x > x33: x33, x1 = x, x33

if x % 3 == 0 and x > x3: x3 = x

if x % 11 == 0 and x > x11: x11 = x

print(‘Вычисленное контрольное значение:’, max(x1 * x33, x3 * x11))

if r == max(x1 * x33, x3 * x11): print(‘Контроль пройден’)

else: print(‘Контроль не пройден’)

Пример правильной и эффективной программы на языке Бейсик:Пример правильной и эффективной программы на языке Паскаль:
Критерии оценивания выполнения заданияБаллы
Программа правильно работает для любых входных данных произвольного размера. Используемая память не зависит от количества прочитанных чисел, а время работы пропорционально этому количеству.

Допускается наличие в тексте программы до трёх синтаксических ошибок одного из следующих видов:

— пропущен или неверно указан знак пунктуации;

— неверно написано или пропущено зарезервированное слово языка программирования;

— не описана или неверно описана переменная;

— применяется операция, недопустимая для соответствующего типа данных (если одна и та же ошибка встречается несколько раз, то это считается за одну ошибку).

4
Не выполнены условия, позволяющие поставить 4 балла. Программа в целом работает правильно для любых входных данных произвольного размера. Время работы пропорционально количеству введённых чисел.

Кроме того, допускается наличие одной ошибки, принадлежащей к одному из следующих видов ошибок.

1) Ошибка при инициализации максимумов.

2) Неверно обрабатывается ситуация, когда один или несколько максимумов не определены.

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

4) При вычислении максимумов учитываются произведения вида a[i]*a[i],

5) Допущен выход за границу массива.

6) Допущена ошибка в реализации алгоритма сортировки.

7) Используется знак » max) then max := a[i]* a [ j] ;

2
He выполнены условия, позволяющие поставить 2, 3 или 4 балла. При этом выполнено одно из двух условий.

1. Из описания алгоритма и общей структуры программы видно, что экзаменуемый в целом правильно представляет путь решения задачи.

2. Программа правильно работает в одном из важных частных случаев, например в случае, когда искомое произведение — это произведение наибольшего числа, которое делится на 3, и наибольшего числа, которое делится на 11.

Источник

Информация зашифрована в виде последовательности положительных чисел в которой отношение послед

По каналу связи передаются данные в виде последовательности положительных целых чисел. Количество чисел заранее неизвестно, но не менее двух, признаком конца данных считается число 0. После данных передаётся контрольное значение. Оно равно такому максимально возможному произведению двух чисел из переданного набора, которое делится на 7, но не делится на 49. Если такое произведение получить нельзя, контрольное значение считается равным 1.

Напишите эффективную, в том числе по памяти, программу, которая будет моделировать процесс приёма данных. Программа должна ввести все числа и контрольное значение и напечатать краткий отчёт, включающий количество принятых чисел, принятое контрольное значение, вычисленное контрольное значение и вывод о совпадении значений. Перед текстом программы кратко опишите алгоритм решения задачи и укажите используемый язык программирования и его версию.

Вам предлагаются два задания, связанные с этой задачей: задание А и задание Б. Вы можете решать оба задания А и Б или одно из них по своему выбору.

Итоговая оценка выставляется как максимальная из оценок за задания А и Б. Если решение одного из заданий не представлено, то считается, что оценка за это задание составляет 0 баллов.

Задание Б является усложненным вариантом задания А, оно содержит дополнительные требования к программе. Перед программой укажите версию языка программирования.

А. Напишите на любом языке программирования программу для решения поставленной задачи, в которой входные данные будут запоминаться в массиве, после чего будут проверены все возможные пары элементов.

Обязательно укажите, что программа является решением задания А.

Максимальная оценка за выполнение задания А – 2 балла.

Б. Напишите программу для решения поставленной задачи, которая будет эффективна как по времени, так и по памяти (или хотя бы по одной из этих характеристик).

Программа считается эффективной по времени, если время работы программы пропорционально количеству элементов последовательности N, т.е. при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз. Обязательно укажите, что программа является решением задания Б.

Описание входных данных.

В каждой строке исходных данных содержится одно целое число. Сначала идут строки с основными данными — положительными числами, затем число 0 (признак окончания данных), в последней строке — контрольное значение.

Программа должна вывести отчёт по форме, приведённой ниже в примере.

Источник

Информация зашифрована в виде последовательности положительных чисел в которой отношение послед

По каналу связи передаётся последовательность положительных целых чисел, все числа не превышают 1000. Количество чисел известно, но может быть очень велико. Затем передаётся контрольное значение последовательности — наибольшее число R, удовлетворяющее следующим условиям:

1) R — произведение двух различных переданных элементов последовательности («различные» означает, что не рассматриваются квадраты переданных чисел, произведения различных элементов последовательности, равных по величине, допускаются);

Если такого числа R нет, то контрольное значение полагается равным 0. В результате помех при передаче как сами числа, так и контрольное значение могут быть искажены.

Напишите эффективную, в том числе по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет проверять правильность контрольного значения. Программа должна напечатать отчёт по следующей форме:

Контроль пройден (или — Контроль не пройден)

Перед текстом программы кратко опишите используемый Вами алгоритм решения.

На вход программе в первой строке подаётся количество чисел N. В каждой из последующих N строк записано одно натуральное число, не превышающее 1000. В последней строке записано контрольное значение.

Пример входных данных:

Пример выходных данных для приведённого выше примера входных данных:

Вычисленное контрольное значение: 9690

Произведение двух чисел делится на 10 если:

— один из сомножителей делится на 10 (второй может быть любым) либо

— ни один из сомножителей не делится на 10. причём один из сомножителей делится на 2. а другой — на 5.

Поэтому программа, вычисляющая кодовое число, может работать так.

Программа читает все входные данные один раз. не запоминая все данные

в массиве. Программа для прочитанного фрагмента входной

последовательности хранит значения четырёх величин:

М2 — самое большое чётное число, не кратное 5;

М7 — самое большое число, кратное 5, но не кратное 2:

М10 — самое большое число, кратное 10;

МАХ — самое большое число среди всех элементов последовательности, отличное от М10 (если число М10 встретилось более одного раза и оно же является максимальным, то МАХ = M10).

После того как все данные прочитаны, искомое кодовое слово вычисляется как максимум из произведений М10*МАХ и М2*М5.

Ниже приведён пример программы на языке Паскаль, которая реализует описанный алгоритм.

Кроме того, приведён пример программы на языке Бейсик, которая правильно решает задачу, но использует алгоритм, немного отличающийся от описанного выше. Возможны и другие правильные алгоритмы. Допускаются решения, записанные на других языках программирования

Пример правильной и эффективной программы на языке Паскаль

var М2,М5,М10,R,MAX,dat,res,i,N: longint;

if ((dat mod 2) = 0) and ((dat mod 5) >0) and (dat > M2) then M2 := dat;

if ((dat mod 5) = 0) and ((dat mod 2) > 0) and (dat > M5) then M5 := dat;

if (dat mod 10 = 0) and (dat > M10) then begin

if M10 > MAX then MAX := M10; M10 := dat;

if dat > MAX then MAX := dat;

if (M2*M5 M2 THEN M2 = DAT ELSE

IF DAT MOD 5=0 AND DAT > M5 THEN M5 = DAT

IF DAT MOD 10 = 0 AND DAT > M10 THEN IF M10 > MAX THEN

MAX = M10 END IF M14 = DAT ELSE

if x % 10 == 0 and x > x10: x10 = x

elif x % 5 == 0 and x > x5: x5 = x

elif x % 2 == 0 and x > x2: x2 = x

print(‘Вычисленное контрольное значение:’, max(m * x10, x2 * x5))

if r == max(m * x10, x2 * x5): print(‘Контроль пройден’)

else: print(‘Контроль не пройден’)

Критерии оценивания выполнения заданияБаллы
Программа правильно работает для любых входных данных произвольного размера. Используемая память не зависит от количества прочитанных чисел, а время работы пропорционально этому количеству.

Допускается наличие в тексте программы до трёх синтаксических ошибок одного из следующих видов:

— пропущен или неверно указан знак пунктуации;

— неверно написано или пропущено зарезервированное слово языка программирования;

— не описана или неверно описана переменная:

— применяется операция, недопустимая для соответствующего типа данных (если одна и та же ошибка встречается

несколько раз, то это считается за одну ошибку).

4
Не выполнены условия, позволяющие поставить 4 балла. Программа в целом работает правильно для любых входных данных произвольного размера. Время работы пропорционально количеству введенных чисел.

Используемая память, возможно, зависит от количества прочитанных чисел (например, входные данные запоминаются в массиве или другой структуре данных (контейнер priority queue, vector, set или map в С++)).

Допускается ошибка при вводе данных, неверный или неполный вывод результатов или неверная работа программы в «экзотических» ситуациях. Например, при использовании 16-битного целого (integer в BPascal или Qbasic) умножаются два числа этого типа (результат по условию может не помещаться в 16 бит).

Кроме того, допускается наличие одной ошибки, принадлежащей к одному из следующих видов ошибок.

1) Ошибка при инициализации максимумов.

2) Неверно обрабатывается ситуация, когда один или несколько максимумов не определены.

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

4) При вычислении максимумов учитываются произведения вида а[i]*а[i].

5) Допущен выход за границу массива.

6) Допущена ошибка в реализации алгоритма сортировки.

7) Используется знак » max) then max := a[i]*a[j];

2
He выполнены условия, позволяющие поставить 2. 3 или 4 балла.

При этом выполнено одно из двух условий.

1. Из описания алгоритма и общей структуры программы видно, что экзаменуемый в целом правильно представляет путь решения задачи.

Допускается любое число синтаксических ошибок.

Источник

Методические указания к решению задания 1

Задание 1 Несимметричное шифрование – дешифрование.

Зашифровать информацию по методу RSA для последующей передачи. Вариант задания определяется последними цифрами номера студенческого билета. По номеру i (предпоследняя цифра) студент выбирает сообщение для зашифровывания, по j – требуемые для реализации этого алгоритма числа р и q.

I
СообщениеПринтерИнтегралМинусМодульПлюс
G
p q7.115.173.1111.1913.17
I
СообщениеЧислоДробьКореньОстатокСтепень
G
p q7.175.117.1311.175.13

Методические указания к решению задания 1

Одним из наиболее распространенных методов несимметричного шифрования- дешифрования является метод шифрования с открытым ключом, в котором используется алгоритм RSA.

Алгоритм основан на использовании операции возведения в степень модульной арифметики. Его можно представить в виде следующей последовательности шагов:

Шаг 1. Выбирается два больших простых числа числа р и q. Простыми называются числа, которые делятся на самих себя и на 1. На практике для обеспечения криптостойкости системы величина этих чисел должна быть длиной не менее двухсот десятичных разрядов.

Шаг 2. Вычисляется открытая компонента ключа n

Шаг 3. Находится функция Эйлера по формуле

Функция Эйлера показывает количество целых положительных чисел от1 до n, которые не имеют ни одного общего делителя, кроме 1.

Шаг 4. Выбирается число е, которое должно взаимно простым со значением функции Эйлера и меньшим, чем f(р q.)

Шаг 5. Определяется число d, удовлетворяющее соотношению

Числа е и n принимаются в качестве открытого ключа. В качестве секретного ключа используются числа d и n.

Шаг 6. Исходная информация независимо от её физической природы представляется в числовом двоичном виде. Последовательность бит разделяется на блоки длиной L бит, где L – наименьшее целое число, удовлетворяющее условию

L ³ log2(n.+1); Каждый блок рассматривается как целое положительное число X(i), принадлежащее интервалу (0, n-1). Таким образом, исходная информация представляется последовательностью чисел X(i), (i = 1.I).Значение I определяется длиной шифруемой последовательности.

Шаг 7 Зашифрованная информация получается в виде последовательности чисел Y(i)= (Y(i)) e (mod n).

Шаг 8.Для расшифрования информации используется следующая зависимость

Рассмотрим числовой пример применения метод RSA для криптографического закрытия информации, в котором для простоты вычислений использованы минимально возможные числа. Пусть требуется зашифровать сообщение на русском языке ПРЕДЕЛ.

Зашифруем и расшифруем сообщение «ПРЕДЕЛ» по алгоритму RSA.

1) Выберем p=3 and q=11.

2)Вычислим открытую компоненту ключа: n= 3*11=33.

3) Определим функцию Эйлера: (p-1)*(q-1)=20. Следовательно, d будет равно, например, 3: (d=3).

4) Выберем число е по следующей формуле: (e*3) mod 20=1. е будет равно 7: (e=7).

Числа е и n принимаются в качестве открытого ключа, d и n используются в качестве секретного ключа.

Буквы алфавитаАБВГДЕЖЗИйКЛМНОПР
Номер буквы
Буквы алфавитаСТУФХСЧШЩЪЫЬЭЮЯ
Номер буквы

5) Представим шифруемое сообщение как последовательность чисел в диапазоне от 0 до 32: 16, 17, 6, 5, 6, 12,

Для представления чисел в двоичном виде требуется 6 двоичных разрядов, так как в русском алфавите используются 33 буквы, поэтому исходный текст имеет вид: 010000, 010001, 000110, 000101, 000110, 001100.

Длина блока L определяется как минимальное число из целых чисел, удовлетворяющих условию L ³ log2(33+1); L=6

Теперь зашифруем сообщение, используя открытый ключ

Y1 = (16 7 ) mod 33 = информация зашифрована в виде последовательности положительных чисел в которой отношение послед;

Y2 = (17 7 ) mod 33 = информация зашифрована в виде последовательности положительных чисел в которой отношение послед;

Y3 = (6 7 ) mod 33 = информация зашифрована в виде последовательности положительных чисел в которой отношение послед;

Y4 = (5 7 ) mod 33 = информация зашифрована в виде последовательности положительных чисел в которой отношение послед;

Y5 = (6 7 ) mod 33 = информация зашифрована в виде последовательности положительных чисел в которой отношение послед;

Y6 = (12^7) mod 33 = информация зашифрована в виде последовательности положительных чисел в которой отношение послед;

Расшифруем полученные данные, используя закрытый ключ <3,33>.

Y1 = (25 3 ) mod 33 = информация зашифрована в виде последовательности положительных чисел в которой отношение послед;

Y2 = (8 3 ) mod 33 = информация зашифрована в виде последовательности положительных чисел в которой отношение послед;

Y3 = (30 3 ) mod 33 = информация зашифрована в виде последовательности положительных чисел в которой отношение послед;

Y4 = (14 3 ) mod 33 = информация зашифрована в виде последовательности положительных чисел в которой отношение послед;

Y5 = (30 7 ) mod 33 = информация зашифрована в виде последовательности положительных чисел в которой отношение послед;

Y6 = (12 3 ) mod 33 = информация зашифрована в виде последовательности положительных чисел в которой отношение послед;

Данные расшифрованы, сопоставим последовательность с последовательностью букв нашего алфавита. Получили слово ПРЕДЕЛ.

Задание 2. Хеширование и цифровая подпись документов.

Используя данные задания 2, получить хеш – код m для сообщения М при помощи хеш – функции Н, взятой из рекомендаций МККТТ Х.509. Вектор инициализации Н0 выбрать равным нулю.

Вычислить цифровую подпись методом RSA под электронным документом М, используя рассчитанный хеш – код m и секретный ключ d.

Представить схему цифровой подписи с подробным описанием ее функционирования.

Хеш – функцию МККТТ Х.509 запишем следующим образом:

Все блоки делят пополам и к каждой половине прибавляют равноценное количество единиц. С преобразованными таким образом блоками производят интеграционные действия.

Необходимо получить хеш – код сообщения ПРЕДЕЛ при помощи хеш функции Х.509 с параметрами p=3, q=11.

Порядок вычисления хеш – кода:

А) получить значение модуля: n=pq= 3*11=33

Б)Представить сообщение в виде номеров букв русского алфавита в десятичном и двоичном видах:

00010000, 00010001, 00000110, 00000101, 00000110, 00001100.

В) Разбить байт пополам, добавив в начало полубайта единицы и получить хешируемые блоки Мi:

M1M2M3M4M5M6
M7M8M9M10M11M12

Г) Выполнить интеративные шаги:

М1
Å
Н0=0
Н0 Å М111110001=24110
[(H0Å M1) 2 ] (mod 33)241 mod 33 = 10
Н11010=00001010
М2
Å
Н1
Н1 Å М211111010=25010
[(H1Å M2) 2 ] (mod 33)250 mod 33 = 19
Н1
М3
Å
Н2
Н2 Å М311100010=22610
[(H2Å M3) 2 ] (mod 33)226 mod 33 = 28
Н3
М4
Å
Н3
Н3 Å М411101101=23710
[(H3Å M4) 2 ] (mod 33)237 mod 33 = 6
Н4
М5
Å
Н4
Н4 Å М511110110=24610
[(H4Å M5) 2 ] (mod 33)246 mod 33 = 15
Н5
М6
Å
Н5
Н5 Å М611111001=24910
[(H5Å M6) 2 ] (mod 33)249 mod 33 =18
Н6
М7
Å
Н6
Н6 Å М711100010 = 22610
[(H6Å M7) 2 ] (mod 33)226 mod 33 = 28
Н7
М8
Å
Н7
Н7 Å М811101001= 233
[(H7Å M8) 2 ] (mod 33)233 mod 33 = 2
Н8
М9
Å
Н8
Н8 Å М911110010 = 24210
[(H8Å M9) 2 ] (mod 33)242 mod 33 = 11
Н9
М10
Å
Н9
Н9 Å М1011111101 = 253
[(H9Å M10) 2 ] (mod 33)253 mod 33 = 22
Н10
М11
Å
Н10
Н10 Å М1111100110 =23010
[(H10ÅM11) 2 ] (mod 33)230 mod 33 = 32
Н11
М12
Å
Н11
Н11 Å М1211011100 = 22010
[(H11ÅM12) 2 ] (mod 33)220 mod 33 = 22
Н12

Таким образом, исходное сообщение ПРЕДЕЛ имеет хеш – код m=22.

Для вычисления цифровой подписи используем следующую формулу:

S=m d (mod n) = 22 3 mod 33 = 22

Пара (M, S) передается получателю как электронный документ М, подписанный цифровой подписью S, причем подпись S сформирована обладателем секретного ключа d.

Получив пару (M, S), получатель вычисляет хеш – код сообщения М двумя способами:

1) Восстанавливает хеш – код m’, применяя криптографическое преобразование подписи S с использованием открытого ключа e:

m’=S e (mod n) =22 7 mod 33 = 22

2) Находит результат хеширования принятого сообщения с помощью той же хеш – функции: m=H(M) =22.

При равенстве вычисленных значений m’ и m получатель признает пару (M, S) подлинной.

СПИСОК ЛИТЕРАТУРЫ

1. Романец Ю. В. Защита информации в компьютерных системах и сетях. /Под ред. В.Ф. Шаньгина. – М: Радио и связь 1999

2. Петраков А.В. Основы практической защиты информации. 2-е издание Учебн. Пособие. – М: Радио и связь 200

3. Защита информации в телекоммуникационных системах. Программа, метод. указ. и контр. Задания АИЭС 2006

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *