Сущность метода зонного сжатия буквенной информации. Описание классов, определяющих место хранения символов и алфавита. Реализация асимметричного алгоритма RSA. Логика построения шифра и структура ключевой информации в криптографическом алгоритме ГОСТ.
Аннотация к работе
Задание 1. Метод зонного сжатия информации Описание алгоритма При записи информации в памяти ЭВМ каждой букве или цифре отводится обычно 8 двоичных разрядов (байт), ибо последний является наименьшей адресуемой структурной единицей памяти. Коэффициент сжатия определяется как отношение количества байтов в исходном тексте n1 к числу байтов в сжатом тексте n2 : Ксж = n1 / n2. Реализация Класс RsaEncoder выполняет шифрацию и дешифрацию по заданному открытому ключу. public class RsaEncoder { private long p, q, module, Fi; public long openKey, closeKey; public RsaEncoder(long openKey) throws KeyException { p = 3557; q = 2579; module = p * q; Fi = (p-1)*(q-1); this.openKey = openKey; if(openKey>Fi) throw new KeyException(Key is too long); closeKey = modInverse(openKey, Fi); } long modInverse(long a, long n) { long i = n, v = 0, d = 1; while (a>0) { long t = i/a, x = a; a = i% x; i = x; x = d; d = v - t*x; v = x; } v%= n; if (v /// Возвращает бит в num байте val /// ///Входной байт ///Номер бита, начиная с 0 ///true-бит равен 1, false- бит равен 0 public static bool GetBit(byte val, int num) { if ((num > 7) || (num > num) & 1) > 0;//собственно все вычисления } public static bool GetBit(uint val, int num) { if ((num > 31) || (num > num) & 1) > 0;//собственно все вычисления } /// /// Устанавливает значение определенного бита в байте /// ///Входной байт ///Номер бита ///Значение бита: true-бит равен 1, false- бит равен 0 ///Байт, с измененным значением бита public static byte SetBit(byte val, int num, bool bit) { if ((num > 7) || (num 31) || (num /// Изменяет порядок битов на обратный /// ///Входнойбайт ///Байт с обратным порядком битов public static byte Reverse(byte val) { int i = 0; byte rez = 0; for (i = 0; i > i) & 1) > 0) { rez = (byte)(rez | 1); } } return rez; } public static uint Reverse(uint val) { int i = 0; uint rez = 0; for (i = 0; i > i) & 1) > 0) { rez = rez | 1; } } return rez; } } Класс Key для хранения ключа. public class Key { public readonly byte[] KeyBytes; public readonly string KeyString; // ReSharper disable once UnassignedReadonlyField public readonly uint[] KeyUints; public Key(string key) { if(key.Length!=64) throw new ArgumentException(Wrong key string length, key must have 64 letters, its 32 bytes, its 256 bits); KeyString = key; KeyBytes = new byte[32]; KeyUints = new uint[8]; byte[] buf = MathBlock.FromHex(key); for (int i = 0; i > (bitsize - count)) & ((1 > (bitsize - count)) & ((1