Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Скользящий (прокручивающий, кольцевой ) хеш rolling hash

Лекция



Привет, Вы узнаете о том , что такое скользящий хеш, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое скользящий хеш, rolling hash, прокручивающий хеш , кольцевой хеш , настоятельно рекомендую прочитать все из категории Шифры в криптографии.

Скользящий (прокручивающий, кольцевой ) хеш rolling hash — хеш-функция, обрабатывающая вход в рамках некоторого окна. Получение значения хеш-функции для сдвинутого окна в таких функциях является дешевой операцией. Для пересчета значения требуется знать лишь предыдущее значение хеша, значение входных данных, которые остались за пределами окна, и значение данных, которые попали в окно. Другими словами, если Скользящий (прокручивающий, кольцевой ) хеш rolling hash представляет собой хеш последовательности Скользящий (прокручивающий, кольцевой ) хеш rolling hash, то хеш Скользящий (прокручивающий, кольцевой ) хеш rolling hash для «сдвинутой» последовательности Скользящий (прокручивающий, кольцевой ) хеш rolling hash может быть получен с помощью легко вычислимой функции Скользящий (прокручивающий, кольцевой ) хеш rolling hash.

Возможность быстрого «сдвига» хеша накладывает некоторые ограничения на теоретические гарантии. В частности, показано , что семейства кольцевых хешей не могут быть 3-независимыми[en]; максимум — универсальными или 2-независимыми[en]. Впрочем, для большинства приложений достаточно универсальности (даже приблизительной).

Одним из основных применениий является алгоритм поиска строки Рабина – Карпа , который использует скользящий хеш , описанный ниже. кольцевой хеш применяется для поиска подстроки в алгоритме Рабина — Карпа, для вычисления хешей N-грамм в тексте , а также в программе rsync для сравнения двоичных файлов (используется кольцевая версия adler-32).

Еще одно популярное приложение - это программа rsync , которая использует контрольную сумму на основе adler-32 Марка Адлера в качестве скользящего хеша. Сетевая файловая система с низкой пропускной способностью (LBFS) использует отпечаток Рабина в качестве скользящего хэша. FastCDC (Fast Content-Defined Chunking) использует эффективный с точки зрения вычислений отпечаток Gear в качестве скользящего хэша.

В лучшем случае скользящие хеш-значения попарно независимы или строго универсальны . Например, они не могут быть 3-мя независимыми .

Полиномиальный хеш

В алгоритме Рабина — Карпа часто используется простой полиномиальный кольцевой хеш, построенный на операциях умножения и сложения :

Скользящий (прокручивающий, кольцевой ) хеш rolling hash.

Чтобы избежать использования целочисленной арифметики произвольной точности, используется арифметика в кольце вычетов по модулю Скользящий (прокручивающий, кольцевой ) хеш rolling hash, умещающемуся в одно машинное слово. Выбор констант Скользящий (прокручивающий, кольцевой ) хеш rolling hash и Скользящий (прокручивающий, кольцевой ) хеш rolling hash очень важен для получения качественного хеша. В исходном варианте хеша предполагалось, что Скользящий (прокручивающий, кольцевой ) хеш rolling hash должно быть случайно выбранным простым числом, а Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Но ввиду того, что алгоритм выбора случайного простого числа не такой простой, предпочитают использовать вариант хеша, в котором Скользящий (прокручивающий, кольцевой ) хеш rolling hash является фиксированным простым числом, а Скользящий (прокручивающий, кольцевой ) хеш rolling hash выбирается случайно из диапазона Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Дитзфелбингер и др. показали, что такой вариант хеша имеет те же теоретические характеристики, что и исходный. В частности, вероятность совпадения значений хешей двух различных строк Скользящий (прокручивающий, кольцевой ) хеш rolling hash и Скользящий (прокручивающий, кольцевой ) хеш rolling hash не превосходит Скользящий (прокручивающий, кольцевой ) хеш rolling hash, если Скользящий (прокручивающий, кольцевой ) хеш rolling hash и Скользящий (прокручивающий, кольцевой ) хеш rolling hash представляют собой целые числа из диапазона Скользящий (прокручивающий, кольцевой ) хеш rolling hash, Скользящий (прокручивающий, кольцевой ) хеш rolling hash и Скользящий (прокручивающий, кольцевой ) хеш rolling hash выбирается действительно случайно.

Удаление старых входных символов и добавление новых производится путем прибавления или вычитания первого или последнего члена формулы (по модулю Скользящий (прокручивающий, кольцевой ) хеш rolling hash). Для удаления члена Скользящий (прокручивающий, кольцевой ) хеш rolling hash хранят заранее посчитанное значение Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Сдвиг окна производится путем домножения всего многочлена Скользящий (прокручивающий, кольцевой ) хеш rolling hash на Скользящий (прокручивающий, кольцевой ) хеш rolling hash либо делением на Скользящий (прокручивающий, кольцевой ) хеш rolling hash (если Скользящий (прокручивающий, кольцевой ) хеш rolling hash простое, то в кольце вычетов возможно вместо деления производить умножение на обратную величину). На практике удобнее всего полагать Скользящий (прокручивающий, кольцевой ) хеш rolling hash или Скользящий (прокручивающий, кольцевой ) хеш rolling hash для, соответственно, 32- и 64-битовых машинных слов (это так называемые простые числа Мерсенна). В таком случае операция взятия модуля может быть выполнена на многих компьютерах с помощью быстрых операций побитового сдвига и сложения . Другой возможный выбор — значения Скользящий (прокручивающий, кольцевой ) хеш rolling hash или Скользящий (прокручивающий, кольцевой ) хеш rolling hash, для которых тоже существуют быстрые алгоритмы взятия остатка от деления на Скользящий (прокручивающий, кольцевой ) хеш rolling hash (при этом диапазон допустимых значений Скользящий (прокручивающий, кольцевой ) хеш rolling hash немного сужают) . Частое заблуждение — полагать Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Существуют семейства строк, на которых хеш с Скользящий (прокручивающий, кольцевой ) хеш rolling hash будет всегда давать множество коллизий, независимо от выбора Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Эти и другие дальнейшие детали реализации и теоретического анализ полиномиального хеша можно найти в статье об алгоритме Рабина — Карпа.

Полиномиальный хеш над полем GF(2L)

Данный хеш похож на обычный полиномиальный хеш, но все вычисления в нем производятся в конечном поле Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Обычно Скользящий (прокручивающий, кольцевой ) хеш rolling hash выбирается равным 64. Элементы поля — это числа Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Сложение в поле реализуется с помощью операции побитового исключающего «или» Скользящий (прокручивающий, кольцевой ) хеш rolling hash, а умножение выполняется с помощью операции Скользящий (прокручивающий, кольцевой ) хеш rolling hash, которая сначала беспереносно умножает[en] Скользящий (прокручивающий, кольцевой ) хеш rolling hash на Скользящий (прокручивающий, кольцевой ) хеш rolling hash, а потом берет остаток от «беспереносного» деления результата на некоторый выбранный фиксированный элемент Скользящий (прокручивающий, кольцевой ) хеш rolling hash (беспереносным делением здесь названа операция обратная беспереносному умножению). Элемент Скользящий (прокручивающий, кольцевой ) хеш rolling hash должен быть выбран так, что Скользящий (прокручивающий, кольцевой ) хеш rolling hash и Скользящий (прокручивающий, кольцевой ) хеш rolling hash — это неприводимый многочлен над полем Скользящий (прокручивающий, кольцевой ) хеш rolling hash (на поле Скользящий (прокручивающий, кольцевой ) хеш rolling hash часто смотрят как на множество многочленов над полем Скользящий (прокручивающий, кольцевой ) хеш rolling hash по модулю произвольного неприводимого многочлена степени Скользящий (прокручивающий, кольцевой ) хеш rolling hash). Об этом говорит сайт https://intellect.icu . Например, можно положить Скользящий (прокручивающий, кольцевой ) хеш rolling hash . Тогда хеш вычисляется следующим образом :

Скользящий (прокручивающий, кольцевой ) хеш rolling hash,

где Скользящий (прокручивающий, кольцевой ) хеш rolling hash — это случайно выбранное на этапе инициализации хеша число из диапазона Скользящий (прокручивающий, кольцевой ) хеш rolling hash, а Скользящий (прокручивающий, кольцевой ) хеш rolling hash — это короткая запись для Скользящий (прокручивающий, кольцевой ) хеш rolling hash, где Скользящий (прокручивающий, кольцевой ) хеш rolling hash повторен Скользящий (прокручивающий, кольцевой ) хеш rolling hash раз. С помощью основной теоремы алгебры можно показать, что вероятность коллизии хешей двух различных строк длины Скользящий (прокручивающий, кольцевой ) хеш rolling hash не превосходит Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Показано , что на современных процессорах Intel и AMD вся необходимая для хеша арифметика над полем Скользящий (прокручивающий, кольцевой ) хеш rolling hash может быть эффективно вычислена с помощью инструкций из расширения CLMUL[en].

Хеш циклическими полиномами (Buzhash)

Пусть Скользящий (прокручивающий, кольцевой ) хеш rolling hash — какой-то хеш, который отображает символы Скользящий (прокручивающий, кольцевой ) хеш rolling hash хешируемой строки в Скользящий (прокручивающий, кольцевой ) хеш rolling hash-битовые числа (обычно Скользящий (прокручивающий, кольцевой ) хеш rolling hash или Скользящий (прокручивающий, кольцевой ) хеш rolling hash). Хеш циклическими полиномами определяется следующим образом :

Скользящий (прокручивающий, кольцевой ) хеш rolling hash

где Скользящий (прокручивающий, кольцевой ) хеш rolling hash — это операция побитового исключающего «или», а Скользящий (прокручивающий, кольцевой ) хеш rolling hash — это операция циклического сдвига Скользящий (прокручивающий, кольцевой ) хеш rolling hash-битового числа Скользящий (прокручивающий, кольцевой ) хеш rolling hash на Скользящий (прокручивающий, кольцевой ) хеш rolling hash битов влево. Несложно показать, что данный хеш кольцевой:

Скользящий (прокручивающий, кольцевой ) хеш rolling hash

Главное преимущество этого хеша в том, что он использует только быстрые побитовые операции доступные на многих современных компьютерах. Качество хеша напрямую зависит от выбора функции Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Лемире и Касер доказали, что если функция Скользящий (прокручивающий, кольцевой ) хеш rolling hash выбирается случайно из семейства независимых хеш-функций[en], то вероятность совпадения хешей двух различных строк длины Скользящий (прокручивающий, кольцевой ) хеш rolling hash не превосходит Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Это накладывает определенные ограничения на диапазон задач, в которых данный хеш может использоваться. Во-первых, длина хешируемых строк должна быть меньше Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Для алгоритмов хеширования общего назначения это условие может быть проблемой, но, например, для хеширования Скользящий (прокручивающий, кольцевой ) хеш rolling hash-грамм, где Скользящий (прокручивающий, кольцевой ) хеш rolling hash обычно не превосходит 16, такое ограничение является естественным (в случае Скользящий (прокручивающий, кольцевой ) хеш rolling hash-грамм роль символов играют отдельные лексемы текста). Во-вторых, выбор семейства независимых функций Скользящий (прокручивающий, кольцевой ) хеш rolling hash в некоторых случаях тоже может быть проблемой. Для байтового алфавита свойством независимости обладает семейство функций Скользящий (прокручивающий, кольцевой ) хеш rolling hash, закодированных таблицей из 256-и различных случайных Скользящий (прокручивающий, кольцевой ) хеш rolling hash-битовых чисел (выбор функции — это заполнение таблицы). Для хеширования Скользящий (прокручивающий, кольцевой ) хеш rolling hash-грамм можно присваивать различные случайные Скользящий (прокручивающий, кольцевой ) хеш rolling hash-битовые числа различным лексемам (обычно число разных лексем в таких задачах относительно невелико) и такое семейство хеш-функций Скользящий (прокручивающий, кольцевой ) хеш rolling hash тоже имеет свойство независимости.

Хеш Рабина

Данный хеш применим только в специальном случае, когда символы хешируемой строки Скользящий (прокручивающий, кольцевой ) хеш rolling hash суть числа 0 и 1. Идея хеша в том, чтобы смотреть на входную строку Скользящий (прокручивающий, кольцевой ) хеш rolling hash как на многочлен Скользящий (прокручивающий, кольцевой ) хеш rolling hash над полем Скользящий (прокручивающий, кольцевой ) хеш rolling hash, а сам хеш представляет собой взятие остатка от деления Скользящий (прокручивающий, кольцевой ) хеш rolling hash на случайно выбранный на этапе инициализации хеша неприводимый многочлен Скользящий (прокручивающий, кольцевой ) хеш rolling hash степени Скользящий (прокручивающий, кольцевой ) хеш rolling hash над полем Скользящий (прокручивающий, кольцевой ) хеш rolling hash. По существу это та же процедура, что используется в CRC. Рассмотрим ее более подробно.

Результат хеширования строки Скользящий (прокручивающий, кольцевой ) хеш rolling hash — это последовательность битов Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Число Скользящий (прокручивающий, кольцевой ) хеш rolling hash выбирается простым и достаточно большим, но так чтобы последовательность Скользящий (прокручивающий, кольцевой ) хеш rolling hash умещалась в одно машинное слово (обычно берут Скользящий (прокручивающий, кольцевой ) хеш rolling hash или Скользящий (прокручивающий, кольцевой ) хеш rolling hash ). Пусть Скользящий (прокручивающий, кольцевой ) хеш rolling hash представляет собой некоторый неприводимый многочлен степени Скользящий (прокручивающий, кольцевой ) хеш rolling hash над полем Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Обозначим через Скользящий (прокручивающий, кольцевой ) хеш rolling hash соответствующее число с битовым представлением Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Хеш-функция Скользящий (прокручивающий, кольцевой ) хеш rolling hash определяется как число с битовым представлением Скользящий (прокручивающий, кольцевой ) хеш rolling hash таким что многочлен Скользящий (прокручивающий, кольцевой ) хеш rolling hash является остатком от деления многочлена Скользящий (прокручивающий, кольцевой ) хеш rolling hash на многочлен Скользящий (прокручивающий, кольцевой ) хеш rolling hash, то есть Скользящий (прокручивающий, кольцевой ) хеш rolling hash.

Несмотря на весьма запутанное определение, хеш Рабина довольно просто реализуем (если неприводимый многочлен Скользящий (прокручивающий, кольцевой ) хеш rolling hash уже найден). Вычисления опираются на такое несложное наблюдение: если число Скользящий (прокручивающий, кольцевой ) хеш rolling hash с битовым представлением Скользящий (прокручивающий, кольцевой ) хеш rolling hash кодирует многочлен Скользящий (прокручивающий, кольцевой ) хеш rolling hash, то число Скользящий (прокручивающий, кольцевой ) хеш rolling hash кодирует многочлен Скользящий (прокручивающий, кольцевой ) хеш rolling hash, где Скользящий (прокручивающий, кольцевой ) хеш rolling hash обозначает операцию побитового сдвига числа Скользящий (прокручивающий, кольцевой ) хеш rolling hash на один бит влево с замещением младшего бита нулем (не путать с циклическим сдвигом Скользящий (прокручивающий, кольцевой ) хеш rolling hash, определенным выше!). Пусть Скользящий (прокручивающий, кольцевой ) хеш rolling hash, и Скользящий (прокручивающий, кольцевой ) хеш rolling hash — это битовое представление Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Тогда Скользящий (прокручивающий, кольцевой ) хеш rolling hash вычисляется следующим образом:

Скользящий (прокручивающий, кольцевой ) хеш rolling hash если Скользящий (прокручивающий, кольцевой ) хеш rolling hash

Скользящий (прокручивающий, кольцевой ) хеш rolling hash если Скользящий (прокручивающий, кольцевой ) хеш rolling hash

Хеш является кольцевым. Пусть Скользящий (прокручивающий, кольцевой ) хеш rolling hash и Скользящий (прокручивающий, кольцевой ) хеш rolling hash — это битовое представление Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Хеш Скользящий (прокручивающий, кольцевой ) хеш rolling hash вычисляется следующим образом :

Скользящий (прокручивающий, кольцевой ) хеш rolling hash если Скользящий (прокручивающий, кольцевой ) хеш rolling hash

Скользящий (прокручивающий, кольцевой ) хеш rolling hash если Скользящий (прокручивающий, кольцевой ) хеш rolling hash

где Скользящий (прокручивающий, кольцевой ) хеш rolling hash — это Скользящий (прокручивающий, кольцевой ) хеш rolling hash-битовое число, битовое представление которого соответствует многочлену Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Число Скользящий (прокручивающий, кольцевой ) хеш rolling hash вычисляют заранее при инициализации хеша строки длины Скользящий (прокручивающий, кольцевой ) хеш rolling hash.

Главная сложность — случайным образом выбрать неприводимый многочлен Скользящий (прокручивающий, кольцевой ) хеш rolling hash степени Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Рабин описал эффективный алгоритм, позволяющий это сделать, и доказал, что вероятность коллизии хешей двух различных строк длины Скользящий (прокручивающий, кольцевой ) хеш rolling hash при случайном выборе Скользящий (прокручивающий, кольцевой ) хеш rolling hash не превосходит Скользящий (прокручивающий, кольцевой ) хеш rolling hash.

Отметим, что данный хеш часто путают с полиномиальным хешем из-за схожей области применения, рассмотрения многочленов и общего автора.

Нарезка на основе содержимого с использованием скользящего хеша [ править ]

Одним из интересных вариантов использования скользящей хэш-функции является то, что она может создавать динамические блоки на основе содержимого потока или файла. Это особенно полезно, когда требуется отправить по сети только измененные фрагменты большого файла, и простое добавление байта в начале файла приведет к обновлению всех окон фиксированного размера, в то время как на самом деле только первые "чанк" был изменен.

Самый простой подход к вычислению динамических фрагментов - это вычисление скользящего хеша, и если он соответствует шаблону (например, все младшие N бит - нули), то это граница фрагмента. Такой подход гарантирует, что любое изменение файла повлияет только на его текущий и, возможно, следующий фрагмент, но ни на что другое.

Когда границы известны, блоки необходимо сравнить по их хеш-значениям, чтобы определить, какой из них был изменен и нуждается в передаче по сети. Программа резервного копирования Attic использует алгоритм Buzhash с настраиваемым диапазоном размера блока для разделения потоков файлов.

Нарезка на основе содержимого с использованием скользящей суммы

Несколько программ, включая gzip (с --rsyncableопцией) и rsyncrypto, выполняют нарезку на основе содержимого на основе этой конкретной (невзвешенной) скользящей суммы:

Скользящий (прокручивающий, кольцевой ) хеш rolling hash

Скользящий (прокручивающий, кольцевой ) хеш rolling hash

где

  • Скользящий (прокручивающий, кольцевой ) хеш rolling hash это сумма 8196 последовательных байтов, заканчивающихся байтом Скользящий (прокручивающий, кольцевой ) хеш rolling hash (требуется 21 бит памяти),
  • Скользящий (прокручивающий, кольцевой ) хеш rolling hash это байт Скользящий (прокручивающий, кольцевой ) хеш rolling hash файла,
  • Скользящий (прокручивающий, кольцевой ) хеш rolling hash "хеш-значение", состоящее из нижних 12 битов Скользящий (прокручивающий, кольцевой ) хеш rolling hash.

Сдвиг окна на один байт просто включает добавление нового символа к сумме и вычитание самого старого символа (уже не находящегося в окне) из суммы.

Для каждого Скользящий (прокручивающий, кольцевой ) хеш rolling hash где Скользящий (прокручивающий, кольцевой ) хеш rolling hashэти программы разрезают файл между Скользящий (прокручивающий, кольцевой ) хеш rolling hash и Скользящий (прокручивающий, кольцевой ) хеш rolling hash. Такой подход гарантирует, что любое изменение файла повлияет только на его текущий и, возможно, следующий фрагмент, но не на другой фрагмент.

Отпечаток устройства Gear и алгоритм фрагментации на основе контента FastCDC

Алгоритм Content-Defined Chunking (CDC) должен вычислять хэш-значение потока данных побайтно и разбивать поток данных на фрагменты, когда хеш-значение соответствует заранее заданному значению. Однако побайтовое сравнение строки приведет к значительным накладным расходам на вычисления. FastCDC предлагает новый и эффективный подход Content-Defined Chunking. Он использует быстрый алгоритм хеширования Gear , пропускающий минимальную длину, нормализуя распределение размеров фрагментов и, наконец, что не менее важно, каждый раз прокручивая два байта для ускорения алгоритма CDC, что позволяет достичь примерно в 10 раз большей пропускной способности. чем подход CDC, основанный на Рабине.

Псевдокод базовой версии представлен следующим образом:

  Скользящий (прокручивающий, кольцевой ) хеш rolling hash

Где Gear array - это предварительно рассчитанный массив хеширования. Здесь FastCDC использует алгоритм хеширования Gear, который может быстро вычислить результаты скользящего хеширования и сохранить равномерное распределение результатов хеширования, как у Рабина. По сравнению с традиционным алгоритмом хеширования Рабина, он обеспечивает гораздо более высокую скорость. Эксперименты показывают, что при сегментировании потока данных он может генерировать почти такое же распределение размеров фрагментов за гораздо более короткое время (около 1/10 фрагментов на основе рабина ).

Вычислительная сложность

Все скользящие хеш-функции линейны по количеству символов, но их сложность зависит от длины окна (Скользящий (прокручивающий, кольцевой ) хеш rolling hash) варьируется. Скользящий хеш Рабина – Карпа требует умножения двух Скользящий (прокручивающий, кольцевой ) хеш rolling hash-битные числа, целочисленное умножение в Скользящий (прокручивающий, кольцевой ) хеш rolling hash. [10] Хеширование диаграмм циклическими полиномами может выполняться за линейное время.

Вау!! 😲 Ты еще не читал? Это зря!

Исследование, описанное в статье про скользящий хеш, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое скользящий хеш, rolling hash, прокручивающий хеш , кольцевой хеш и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Шифры в криптографии

создано: 2020-12-19
обновлено: 2024-11-11
7



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Информационная безопасность, Шифры в криптографии

Термины: Информационная безопасность, Шифры в криптографии