Шифрование информации методом перестановки.




Шифрование перестановкой заключается в том, что символы открытого текста переставляются по определенному правилу в пределах некоторого блока этого текста. Данные преобразования приводят к изменению только порядка следования символов исходного сообщения.

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

Метод простой перестановки

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

 

Пример. Зашифруем открытый текст «ПРИЕЗЖАЮДНЕМ» методом перестановки с ключом К=3142.

П Р И Е З Ж А Ю Д Н Е М
                       
И П Е Р А З Ю Ж Е Д М Н

Для дешифрования шифротекста необходимо символы шифротекста перемещать в позицию, указанную соответствующим им символом ключа Ki.

19. С++. Базовые команды языка. Программа.

Порядок выполнения операций (старшинство операций – по убыванию) в языке С++:

5. Вычисление выражений в скобках;

6. Вычисление стандартных функций;

7. Умножение и деление (обозначаются "*" и "/");

8. Сложение и вычитание (обозначаются "+" и "–").

Рассмотрим базовые простые команды языка С++ [8 -9].

8. Команда описания главной функции:

< тип > main ()

{

}

2. Команда описания неглавной функции:

< тип > <имя функции > (< передаваемые параметры>)

{

}

 

9. Ввод – команда ввода в рассмотрение (в тело алгоритма) тех или иных входных параметров:

cin >>вводимый параметр;

10. Вывод – команда вывода на экран тех или иных входных или выходных параметров алгоритма:

cout<< выводимый параметр;

11. Присваивание – команда изменения текущего значения переменной вида:

<идентификатор> = <выражение>;

где <идентификатор> соответствует имени переменной, <выражение> – корректно записанное выражение. Знак "=" означает последовательное выполнение двух действий: определение текущего значения <выражения> и замена текущего значения переменной, имя которой задано <идентификатором>, на новое значение, равное значению <выражения>.

12. Символ начала блок а {.

13. Символ конца блока }.

14. Команда вставки комментариев в текст алгоритма имеет вид:

/* комментарий в несколько строк */

// комментарий в одну строку

Комментировать можно любой объект в программе. Обычно комментируют переменную, структуру данных, команду, группу команд.

Различают три базовые алгоритмические структуры: следование, ветвление, повторение.

1. Действие следования состоит из двух команд с указанной очередностью их выполнения и имеет вид:

<команда – предшественник>;<команда – преемник>.

2. Структура типа ветвления в полной форме состоит из некоторого условия, проверяемого на истинность при выполнении структуры, команды, выполняемой при выполнении проверяемого условия, и команды, выполняемой при невыполнении условия. Условный оператор имеет вид

if <условие> <команда, выполняемая при выполнении условия>; else <команда, выполняемая при невыполнении условия>;

Пример. Команда вида

if (х>y) (если текущее значение х больше текущего значения y) у = х; (текущее значение у полагаем равным текущему значению х) else x= y; (иначе (при х <= y) текущее значение x заменяем на текущее значение y)

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

Структура повторения типа "пока (while)" записывается в виде:

while <условие продолжения повторения> <повторяемая команда>;

или

while <условие продолжения повторения> { <повторяемая команда номер 1>; <повторяемая команда номер 2>;... <повторяемая команда номер N>; } for(<присваивание начального значения счетчику цикла>; <условие проверки выхода из цикла>; <изменение счетчика цикла>){ < операторы цикла>}

Данный цикл выполняется по правилу: если условие повторения для текущих его параметров не выполнено, то повторение команд (тела) цикла на этом завершается; если же оно выполнено, то выполняется тело цикла и опять проверяется условие повторения команд тела цикла.

Пример. Пусть необходимо найти сумму всех нечетных элементов натурального ряда чисел до тех пор, пока эта сумма не превысит значение n. Слагаемое, при котором эта сумма превысит n – включить в сумму.

Функция (программа) имеет вид:

int main()

{

int i=1,n,summa=0;

 

cout<<"Input n= \n";

cin>>n;

 

while (summa<=n)

{

summa=summa+i;

i++;

}

 

summa=summa+i;

 

cout<<" Summa = "<<summa;

 

return 0;

}

Пример. Найти наименьшее общее кратное любых двух целых чисел m, n, найти наибольший их делитель. Программа, содержащая все необходимые подключения к операционной системе Microsoft Visual C++ 2008, будет иметь вид:

 

#include "stdafx.h"

#include <iostream>

using namespace std;

#include <conio.h>

 

 

int main()

{

int n,m,max,min,nok,nod=1,i;

 

cout<<"Enter n = ";

cin>>n;

 

cout<<"\n Enter m = ";

cin>>m;

 

max=n>m?n:m; // выделение наибольшего числа

min=n<m?n:m; // выделение наименьшего числа

 

// Поиск НОД

for(i=1;i<=min;i++)

// сравнение остатков от деления на ноль

if((m%i==0)&&(n%i==0))nod=i;

cout<<" \n NOD = "<<nod<<"\n";

 

// Поиск НОK

for(i=max;i<=m*n;i++)

// сравнение на ноль остатков от деления

if((i%m==0)&&(i%n==0))

{

nok=i;

break; // оператор выхода из цикла

}

cout<<" \n NOK = "<<nok<<"\n";

 

getch(); /* функция не закрытия экрана после окончания

программы */

return 0; // оператор возврата в вызывающую программу

}

20. Данные. Типы данных языка С++.

Любая актуализация информации опирается на данные.

Данные– это некоторые сообщения, слова в некотором заданном алфавите.

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

В языке С++ для описания типа данных используются служебные слова: int, float, char, string, bool и др.

Каждый тип данных допускает использование определенных операций со значениями типа ("с типом").

Для описания переменных, значениями которых могут быть лишь символы, тексты, используются соответствующие ключевые слова: char, string.

Текстовые (символьные) константы обычно заключают в апострофы.

Пример. Составить программу на языке С++ проверки строки символов на симметрию.

#include "stdafx.h"

#include <iostream>

using namespace std;

#include "conio.h"

 

 

int main(){

int n;

bool sim = true; // симметрия есть

string s;

 

cout<<"Enter the char \n";

scanf("%s",&s);// ввод строки

 

n = s.length(); // стандартная функция вычисления длины строки

 

for (int i=0; i < (n / 2); i++)

{

if (s[i]!= s[n -1 - i])

{

sim = false;

break;

}

}

if (sim) cout << "Symmetry - YES!";

else cout << "Symmetry - NO!";

 

_getch();

 

return 0;

}

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: