Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sivilan
6 / 6 / 0
Регистрация: 17.03.2013
Сообщений: 66
#1

Передача вместе с сообщением некоторого хеша - C++

04.09.2013, 22:33. Просмотров 372. Ответов 1
Метки нет (Все метки)

При передаче информационных сообщений по каналам связи часто возникают ошибки, и получается что полученное сообщение отличается от отправленного. Для борьбы с этим применяют различные коды обнаружения ошибок, а также корректирующие коды, позволяющие исправлять наиболее вероятные ошибки. Одним из методов обнаружения ошибок является передача вместе с сообщением некоторого хеша — контрольной суммы, которую можно рассчитать для полученного сообщения и сравнить с контрольной суммой исходного сообщения.
В этой задаче вам необходимо будет реализовать коррекцию ошибок в полученном сообщении с помощью контрольной суммы, которая рассчитывается как полиномиальный хеш. Будем считать, что передается некоторая битовая строка, хранящаяся как двоичное число из n бит. Если пронумеровать биты числа с нуля, начиная с младшего, то полиномиальный хеш рассчитывается по следующей формуле:
h(a) = (a0 + a1t + a2t 2 + ... + ai t i + ... + an − 1t n − 1) mod M, где ai — i -й бит числа.
В этой задаче всегда t = 239, M = 109 + 7.
Принимающая сторона получает, возможно искаженное, сообщение и полиномиальный хеш, рассчитанный для отправленного сообщения. Считается, что сам хеш передается без ошибок. Исправление ошибок происходит по методу наибольшего правдоподобия — необходимо найти сообщение, отличающееся от полученного в минимальном числе бит, и имеющее хеш, равный полученному.
Формат входных данных
Первая строка содержит единственное число K (1 ≤ K ≤ 10) — количество переданных сообщений. Каждая из следующих K строк содержит описание переданного сообщения — три целых числа n (1 ≤ n ≤ 34) — длина сообщения, m (0 ≤ m < 2n ) — число, двоичная запись которого задает битовую строку полученного сообщения и h (0 ≤ h < 109+7) — полученный хеш.
Суммарная длина всех переданных сообщений в одном тесте не превосходит 100.
Формат выходных данных
Для каждого сообщения в отдельной строке необходимо вывести единственное число «−1», если это сообщение невозможно расшифровать, иначе необходимо сначала вывести число d — минимальное количество ошибок и далее в этой же строке d чисел — номера битов, которые были искажены при передаче. Если возможных ответов несколько, выведите любой.
Примеры
Входные данные Выходные данные
3
2 2 239
1 0 1
2 2 238
0
1 0
-1
Идея заключается в том, что необходимо отдельно посчитать хеши для всевозможных вариантов первых n/2 бит сообщения и отдельно для всевозможных вариантов остальных n − n/2 бит сообщения. В каждой половине получится максимум 217 = 131072 вариантов. Поскольку нам необходимо получить сообщение с фиксированным хешом h, то каждому варианту значения хеша для первой половины бит h1 в пару сопоставляется не более одного значения хеша для второй половины бит h2 такое, что h = (h1 + h2) mod M.
Осталось научиться для каждого варианта h1 быстро находить соответствующее значение h2. Для этого можно воспользоваться такими структурами данных, как set в C++ .И, наконец, необходимо из всех найденных пар подходящих значений h1 и h2 выбрать ту, в которой изменилось минимальное число бит по сравнению с принятым сообщением m.Помогите с кодом
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2013, 22:33     Передача вместе с сообщением некоторого хеша
Посмотрите здесь:

Передача функций обратного вызова как членов некоторого класса - C++
Пытаюсь понемногу изучать OpenGL, и вот сейчас столкнулся с такой проблемой: Имеется некоторый класс, содержащий вектор и пару...

Создать шаблон некоторого класса, возможно, реализованного с применением некоторого серверного класса - C++
Добрый день, Уважаемые профессионалы. Прошу помочь в решении задачи. Честно говоря, я ничего не понимаю. И вот...решил...

Получение MD5 хеша - C++
Знаю, на форуме есть много аналогичных тем, но они мне не подходят. Мне надо чтобы проект запускался на компиляторе Visual Studio 2010, и...

Сравнение хеша md5 с строкой - C++
Здраствуйте. Получен MD5 код некого файла - 8F5B9B73D33E8C99202B5058CB6DCE51 в typedef TMD5. Что нужно сделать, чтобы это можно было...

Определение валидности хеша sha256 - C++
Требуется написать программу которая по списку из файла определяет валидный хеш или нет (sha256) http://shadecrypt.com/home# Вот пример...

Сайт откр. с сообщением - C++
Здравствуйте, господа. У меня при запуске программы и нажатии клавиши V откр. сайт, однако появляется сообщение в том случае, если не...

Определить, является ли введённая с клавиатуры строка текстовым сообщением - C++
Помогите пожалуйста

Список. Программа вылетает с сообщением "Необработанное исключение" - C++
При дебаге, обнаружил, что это происходит в начале первого цикла. #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;string&gt; ...

Изменение некоторого символа в массиве - C++
Всем пт! Помогите плз разобраться: char str = &quot;hello&quot;; str = &quot;s&quot;; Читаю книгу Шилдта, там дело сводится к вышенаписанному...

Число вхождений некоторого буквосочетания в предложение - C++
Дано предложение, определить число вхождений в него некоторого буквосочетания.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sue405090
5 / 5 / 1
Регистрация: 15.08.2013
Сообщений: 90
05.09.2013, 09:28     Передача вместе с сообщением некоторого хеша #2
может как то поможет
C#
1
2
3
4
5
6
7
8
9
10
11
12
 private string ComputeFilesMD5(string path)//хеш файла
        {
            using (FileStream fs = File.OpenRead(path))
            {
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] filebytes = new byte[fs.Length];
                fs.Read(filebytes, 0, (int)fs.Length);
                byte[] Sum = md5.ComputeHash(filebytes);
                string result = BitConverter.ToString(Sum).Replace("-", String.Empty);
                return result;
            }
        }
Yandex
Объявления
05.09.2013, 09:28     Передача вместе с сообщением некоторого хеша
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru