Шифр з автоключом
Розглянемо ще один потоковий шифр, в якому кожна буква шифрується в залежності не тільки від її місця у відкритому тексті, але й від інших букв відкритого тексту. Такий шифр називається шифром з автоключем. Під відкритим текстом підписують ключове слово, а далі — сам відкритий текст (зсунутий на позицій вправо) і ці дві послідовності додають за: Ці рівності будуть вірними, коли збігається з… Читати ще >
Шифр з автоключом (реферат, курсова, диплом, контрольна)
шифрування криптоаналіз віженер автоключ.
Теоретичні відомості
Розглянемо ще один потоковий шифр, в якому кожна буква шифрується в залежності не тільки від її місця у відкритому тексті, але й від інших букв відкритого тексту. Такий шифр називається шифром з автоключем. Під відкритим текстом підписують ключове слово, а далі - сам відкритий текст (зсунутий на позицій вправо) і ці дві послідовності додають за :
При криптоаналізі спочатку знаходять довжину ключового слова. Якщо деякаграма двічі зустрічається у відкритому тексті на відстані 2, то в шифротексті на відстані також будуть однаковіграми. Наприклад:
Таким чином, аналізуючи відстані між однаковимиграмами у шифротексті, можна знайти. Для визначення першої букви ключового слова розглядають фрагмент шифротексту Перебирають значення і для кожного підраховують .
Ці рівності будуть вірними, коли збігається з істинним. При цьому частоти букв у зазначеній послідовності близькі до частот букв у відкритому тексті, а при невірному частоти згладжені. Так само знаходять і решту букв ключового слова.
Реалізація на C++
Позначення:
key — ключ шифрування;
msg — масив для повідомлення;
a — рядок для зашифрованого повідомлення;
b — рядок для розшифрованого повідомлення;
n — кількість букв алфавіту;
Тіло програми:
#include.
#include.
#include.
#include.
#include.
#include.
#include.
using namespace std;
int main ().
{.
char msg[100], key[100];
string a;
string b;
cout<<" Write a msg «<
cin>>msg;
cout<<" Think of a key" <
cin>>key;
int len=strlen (msg);
cout<<" Msg length: «<
int y=0;
for (int i=strlen (key); i.
{key[i]=msg[y];
y++;
}.
cout<<" New key: «<< key <
for (int i=0; i.
a+=char ((int (msg[i])+int (key[i])+127)%127);
cout<<" Code: «< for (int i=0; i. b+=char ((int (a[i])-int (key[i])+127)%127); cout<<" DeCode: «< getch (); return 0; }