Шифром принято называть обратимый способ преобразования информации с целью защиты ее от просмотра, в котором используется некий секретный элемент.
Шифр (франц. chiffre, буквально — цифра, от араб. сифр — нуль) , совокупность условных знаков, применяемых для секретной переписки дипломатических представителей (послов, атташе и др. ) со своими правительствами…
Симметричный шифр (симметричные криптосистемы) использует один ключ для шифрования и дешифрования. Асимметричный шифр (ассимметричные криптосистемы) использует два различных ключа.
Шифр - это проще говоря изменённое сообщение, которое отличается от оригинала, допустим изменённым порядком букв, цифр и так далее. Чтобы понять как работает программа для начала я опишу метод подбора ею шифра. Он заключается в так называемом "частотном анализе". В данном случае частота играет роль количества среднестатистического использования русских букв в словакх. Ниже приведу пример букв и их частоту:
А - 0,063
Б - 0,014
В - 0,038
Г - 0,013
Д - 0,025
Е - 0,072
Ё - 0,072 (та же замена "Е")
Ж - 0,007
З - 0,016
И - 0,062
Й - 0,010
К - 0,028
Л - 0,035
М - 0,026
Н - 0,052
О - 0,090
П - 0,023
Р - 0,040
С - 0,045
Т - 0,053
У - 0,021
Ф - 0,001
Х - 0,009
Ц - 0,004
Ч - 0,012
Ш - 0,005
Щ - 0,003
Ъ - 0,015
Ы - 0,017
Ь - о, 015
Э - 0,002
Ю - 0,006
Я - 0,018
Итак перейдём непосредственно к кодировке задуманного:
Код:
unit HackEncrypting;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
// множество всех русских букв
TRusLetters = set of Char;
// исходный алфавит русского языка
TRusSrcAlphabet = array [0..65] of Char;
// относительные частоты русских букв
TRusFrequency = array [0..32] of Real;
TFrequency = array [Char] of Real;
TRusDstAlphabet = array [Char] of Char;
TfmHackEncrypting = class(TForm)
mmDecryptMessage: TMemo;
mmEncryptMessage: TMemo;
lbDecryptMessage: TLabel;
lbEncryptMessage: TLabel;
btnHackEncrypting: TButton;
edKey: TEdit;
lbKey: TLabel;
procedure FormCreate(Sender: TObject);
procedure btnHackEncryptingClick(Sender: TObject);
private
{ Private declarations }
// значение ключа, вычисляемого на основании частотного анализа
nHackKey: Integer;
// количество букв русского алфавита в закодированном сообщение
nCount: LongInt;
// абсолютная частота букв русского алфавита (то есть количество
// каждой буквы по отдельности) в зашифрованном сообщении
AbsFrequency: TFrequency;
// относительная частота букв русского алфавита в шифровке
RelFreqInMsg: TFrequency;
// относительная частота букв русского алфавита в русском языке
RelFreqInLang: TFrequency;
RusDstAlphabet: TRusDstAlphabet;
function UpCaseRus(Ch: Char): Char;
procedure RecalcAlphabet(nKey: Integer);
function DecryptString(strDecryptMsg: String; nKey: Integer): String;
public
{ Public declarations }
end;
const
RusLetters: TRusLetters = ['Ё', 'ё', 'А'..'я'];
RusSrcAlphabet: TRusSrcAlphabet = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' +
'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
// частоты в соответствии с порядком букв в русском алфавите
RusFrequency: TRusFrequency =(
0.063, 0.014, 0.038, 0.013, 0.025, 0.072, 0.072, 0.007,
0.016, 0.062, 0.010, 0.028, 0.035, 0.026, 0.052, 0.090,
0.023, 0.040, 0.045, 0.053, 0.021, 0.001, 0.009, 0.004,
0.012, 0.005, 0.003, 0.015, 0.017, 0.015, 0.002, 0.006,
0.018);
var
fmHackEncrypting: TfmHackEncrypting;
implementation
{$R *.dfm}
// функция заполняет абсолютные частоты для больших и маленьких букв
procedure TfmHackEncrypting.FormCreate(Sender: TObject);
var
i, h: Integer
Лингвистика
Слово "шифр" - это частное слова "код"?
Нет. Шифрование и кодирование - это разные вещи. Следовательно и слова разные.
Похожие вопросы
- Почему слова "ложить" не существует?
- Откуда в русском языке взялось слово ЕСТЬ ("быть" в 3 л. ед. ч наст. вр.)?
- В испанском языке не могу определить род перед словом
- Помогите разобраться в английском. Пока только слова, это внутри
- Почему вдруг слово СКИФЫ звучит на русском с буквой Ф, а во всех остальных языках с буквой Т? Scythian...
- Слово - это то что называют или то, чем называют?
- Вопрос по изучению английских слов. Сам вопрос внутри. Нужен совет
- Лучше идти в сторону максимального сокращения перевода слова, в угоду того что тебе будет легче выучить данное слово?
- Что за идиотские слова в русском языке? Я уже свой язык не понимаю, если конечно его можно было бы назвать уже своим.
- Почему в английском языке некоторые буквы в слове вообще не произносятся?? ? ( см. внутри)