Лингвистика

Слово "шифр" - это частное слова "код"?

Шифром принято называть обратимый способ преобразования информации с целью защиты ее от просмотра, в котором используется некий секретный элемент.
Шифр (франц. 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
Булат Гайнетдинов
Булат Гайнетдинов
74 569
Лучший ответ
Нет. Шифрование и кодирование - это разные вещи. Следовательно и слова разные.