перших комп'ютерів призначалися для виламування німецьких кодів під час Другої світової війни. p align="justify"> Хоча частотний аналіз є потужним засобом, шифрування досі залишається ефективним на практиці, так як багато потенційних криптоаналитики не знайомі з цією технікою. Злом повідомлення без частотного аналізу зазвичай вимагає знання використовуваного шифру, тобто в основному є наслідком шпигунства, хабарі, крадіжки або зради для його визначення. p align="justify"> Імовірність появи окремих букв, а також їх порядок у словах і фразах природної мови підпорядковуються статистичним закономірностям: наприклад, пара стоять поруч букв В«сяВ» у російській мові більш імовірна, ніж В«циВ», а В«оь В»не зустрічається зовсім. Аналізуючи досить довгий текст, зашифрований методом заміни, можна по частотах появи символів зробити зворотну заміну і відновити вихідний текст. p align="justify"> Частотний метод породив вимога рівномірного розподілу символів в шифртексту. Сьогодні принципи частотного аналізу широко застосовуються в програмах з підбору паролів і дозволяють на кілька порядків скоротити час пошуку. br/>
Частотні характеристики текстових повідомлень
Як згадувалося вище, важливими характеристиками тексту є повторюваність букв (кількість різних букв в кожній мові обмежена), пар букв, т.е.m (m-грам), сполучуваність букв один з одним, чергування голосних і приголосних і деякі інші особливості. Примітно, що ці характеристики є досить стійкими. p align="justify"> Ідея полягає в підрахунку чисел входжень кожної nm можливих m-грам в досить довгих відкритих текстах T = t1t2 ... tl, складених з літер алфавіту {a1, a2, ..., an}. При цьому проглядаються поспіль йдуть m-грами тексту: t2 ... tm, t2t3 ... tm +1, ..., ti-m +1 tl-m +2 ... tl.
Якщо L (ai1ai2 ... aim) - число появ m-грами ai1ai2 ... aim в тексті T, а L - загальне число підрахованих m-грам, то при досить великих L частоти L ( ai1ai2 ... aim)/L, для даної m-грами мало відрізняються один від одного.
У силу цього, відносну частоту вважають наближенням ймовірності P (ai1ai2. .. aim) появи даної m-грами в випадково вибраному місці тексту (такий підхід прийнятий при статистичному визначенні ймовірності).
У загальному значенні частоту букв в процентному вираженні можна визначити наступним чином: підраховується скільки разів вона зустрічається в шифром-тексті, потім отримане число ділиться на загальне число символів шифром-тексту; для вираження в процентному вираженні, ще множиться на 100.
Але існує деяка різниця значень частот, яка пояснюється тим, що частоти істотно залежать не тільки від довжини тексту, але і від характеру тексту. Наприклад, текст може бути технічного утримання, де рідкісна буква Ф може стати досить частою. Тому для надійного визначення середньої частоти букв бажано мати набір різних текстів. шифрування заміна підстановка
Код програми
Шифратор
// ---------------------------------------- -----------------------------------
# include
# pragma hdrstop
# include "Unit1.h"
# include "Unit2.h"
// ---------------------------------------- -----------------------------------
# pragma package (smart_init)
# pragma resource "*. dfm" * Form1;
// ---------------------------------------- -----------------------------------
__fastcall TForm1 :: TForm1 (TComponent * Owner)
: TForm (Owner)
{-> Text = ""; -> Text = ""; -> Text = ""; -> Text = "";
}
// ---------------------------------------- -----------------------------------
void __ fastcall TForm1 :: Button1Click (TObject * Sender)
{abc = "абвгдежзийклмнопрстухфцчшщъыьэюя"; nabc, t = "", k = "", i = 1; i <= 33; i + +)
{nom [i] = ((2 * i + n))% 33;
if (nom [i] == 0) nom [i] = 33;}
for (int i = 1; i <= abc.Length (); i + +)
{int m = nom [i];
nabc = nabc + abc [m];} -> Text = nabc; = Memo1-> Text.LowerCase (); = str.Length ();
// Label2-> Caption = IntToStr (len);
for (int i = 1; i <= len; i + +)
{Memo2-> Text = "";
// Memo1-> Text = "";
for (int j = 1; j <= abc.Length (); j + +)
{
if (str [i] == abc [j]) = key + nabc [j];
}
} -> Text...