шифрования (используется сложение в кольце вычетов по модулю, равному мощности алфавита):

Работа добавлена: 2018-07-06






шифрования (используется сложение в кольце вычетов по модулю, равному мощности алфавита):

V /, 1 < / < и С, = Р, +к-,{modm},

где Р = {Рь Р2, ..., Р„ ..., Р„} — открытый текст;п —текста (V /, 1</<п Р,еА); С = {Сь С2, ..., С,, ...,С„}текст;к = {ки къ ..., к„ ..., к„} —ключ шифрования (V /,\<i<n0< к(< т);Va,eА, 1</<тй, + 1 =ai+k.\

Расшифрование выполняется аналогично шифрованию, за ис- jключением того, что увеличение номера в алфавите, соответствую-\щего символу шифротекста, происходит на величинут - к-, (т jмощность алфавита;к{ —очередной элемент ключа):

Vi, \<i<nС,= Р,+т - к/{modm).

Если длина ключа меньше длины открытого текста, то необходимо разбить открытый текст на блоки, длина которых равна дли- = не ключа, и последовательно применить ключ подстановки к каж-з дому блоку открытого текста. Если длина открытого текста не кратна| длине ключа, то последний блок следует дополнить необходимым\числом одних и тех же символов.

Приведем пример функций на языке С, выполняющих шиф-| рование и расшифрование многоалфавитной подстановкой задан-1! ной строки символов (в этом примере открытый текст не разби-] вается на блоки).

♦include   <string.h>

/*функция шифрования открытого текстаstrдлиной пло|ключуkeyсзаписью полученного шифротекста  вres   */ void Crypt(const char *str,   const char *key,   char *res,i unsigned n)

{char   tmp[MAXLEN];   //ключ  скорректированной длины/*выравнивание длин  открытого  текста  и ключа:   усечение или дополнение пробелами ключа  */if(n<strlen(key))   strncpy(tmp,   key,   n); else  strcpy(tmp,   key); while(strlen(tmp)<n) strncat(tmp,    "   ",    1); //цикл шифрованияfor(unsigned   i=0;   i<n;   i++) res[i]=(str[i]+tmp[i])   %   256; res[n]='\0';    } /*функция расшифрования шифротекстаstrдлинойппс ключуkeyсзаписью восстановленного  открытого  текстЩ вres   */

void Encrypt(const char *str, const char *key, char

*res, unsigned n)

{char tmp[MAXLEN];

if (n<strlen(key)) strncpy(tmp, key, n) ;

else strcpy(tmp, key);

while(strlen(tmp)<n)

strncat(tmp, " ", 1);

//цикл расшифрования

for(unsigned i=0; i<n; i++)

res[i]=(str[i]+256-tmp[i])   %   256;

res[n]='\0';   }

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

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

На рис. 4.1 и 4.2 приведены алгоритмы побайтного шифрования и расшифрования открытого текста Р={Р0, Pi, -.., Р„ ..., Р„}. При модификации алгоритма побайтного шифрования к очеред-

Начало

Ро=Ро-Р„ {mod 256}

[ Начало J

±

1 = P,+PM{mod256>

Конец  ]

I   ft>=Po+P« {mod 256}   I fКонец   1

Рис. 4.2. Алгоритм побайтного расшифрования

Рис. 4.1. Алгоритм побайтного шифрования




Возможно эти работы будут Вам интересны.

1. .Полный резерв мощности Резерв активной мощности равный разности между располагаемой мощностью энергосист

2. -либо обратимой операции как правило поразрядного сложения по модулю 2:

3. Вычисляется целое числох,которое является мультипликативно обратным числу у по модулю

4. Окно отображения хода генерации ключа шифрования

5. «Дополнительно» позволяет установить параметры шифрования документ

6. Теорема Теллегена. Баланс мощности

7. тема двух равных по модулю разноименных точечных зарядов расстояние между которыми значительно меньше р.

8. Основные средства и производственные мощности в энергетике

9. -трансляторов. Для СА синтаксический анализатор используется автомат с магазинной стековой

10. .Скважина для забора грунтовых вод количество которых зависит от мощности водоносного пласта .