С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
10 / 10 / 5
Регистрация: 20.04.2014
Сообщений: 161
.NET 4.x

Хеш-функция - преобразовать массив в шестнадцатибитное число

14.06.2015, 21:03. Показов 2819. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,задача: на входе байт массив(из любого файла),нужно высчитать хеш функцию(алгоритм формирования побитовое исключение ИЛИ пар байт исходного сообщения,размер хеш-функции 16 бит).Побитовое исключение сделал.Вопрос как дальше преобразовать данный массив в 16 битное число или какой шаг нужно добавить?и нужно ли что-то делать с длиной массива при чтении?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
FileStream file = new FileStream(file_to_encript,FileMode.Open,FileAccess.Read);
            int len = file_to_encript.Length;
            byte[] buf = new byte[len];
            int r = -1;
            while( r !=0)
            {
                r = file.Read(buf, 0, buf.Length);
            }
            int k=0,m=1,n=0;
            int temp, tempI;
            for(int i =0;i<buf.Length-1;i++)
            {
                if (m > buf.Length) break;
                temp = buf[(k)];
                tempI=buf[(m)];
                
               for(int j =0; j<1;j++)
                {
                    temp = temp ^ tempI;
                    buf[i] = Convert.ToByte(temp);
                }
               k++;
               m++;
              
            }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2015, 21:03
Ответы с готовыми решениями:

Хеш-функция и вывод в ассоциативный массив
Всем привет, есть функция, которая хеширует некоторую строку. Не знаю как добавить вывод пары ключ-значение в ассоциативный массив, в чем...

Хеш-функция и вывод в ассоциативный массив
Всем привет, есть функция, которая хеширует некоторую строку. Не знаю как добавить вывод пары ключ-значение в ассоциативный массив, в чем...

Хеш, хеш-функция, хеширование и HashMap
Снова приветствую, я начал свое знакомство с классом HashMap в Java и ввиду расхождений в разных источниках, которые запутали меня, возник...

7
тыжПрограммист
 Аватар для LonerZzz
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638
14.06.2015, 21:59
C#
1
BitConverter.ToInt64(Твой массив,Начальный индекс в массиве)
вернёт значение типа long
0
10 / 10 / 5
Регистрация: 20.04.2014
Сообщений: 161
14.06.2015, 22:40  [ТС]
LonerZzz, тогда уж
C#
1
textBox1.Text = Convert.ToString(BitConverter.ToInt16(hash, 0));
раз размер 16 бит, но мы как и отрицательное число можем получить, так и не фиксированное. например "6863",что не 16 бит, поэтому и вопрос остается
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,851
Записей в блоге: 1
14.06.2015, 22:42
Лучший ответ Сообщение было отмечено Ev_Hyper как решение

Решение

Salems, по моему ты неправильно реализовал расчет т.к. значение хеша изначально должно накапливаться в переменной нужной длины. У тебя же обновляются все элементы входного массива. По идее надо считать так:
C#
1
2
3
4
5
6
7
ushort hash = 0;
int evenLength = (buf.Length/2)*2;
for (int i=0; i<evenLength; i+=2)
{
    hash ^= (ushort)(buf[i] + buf[i+1]<<8);
}
if (buf.Length % 2 == 1) hash ^= buf[buf.Length-1];
1
10 / 10 / 5
Регистрация: 20.04.2014
Сообщений: 161
14.06.2015, 22:50  [ТС]
OwenGlendower, больше похоже на правду,спасибо. И поясните,пожалуйста, 2 строчку: /2)*2;
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,851
Записей в блоге: 1
14.06.2015, 23:19
Salems, вторая строка выполняет округление в нижную сторону к ближайшему четному. То есть 1001 превратится в 1000. Это упрощает код цикла. Если длина файла нечетная, то последний байт обрабатывается отдельно после цикла.

Добавлено через 14 минут
Нашел ошибку в своем коде. В строке №5 надо использовать оператор побитового ИЛИ вместо сложения:
C#
1
hash ^= (ushort)(buf[i] | buf[i+1]<<8);
1
10 / 10 / 5
Регистрация: 20.04.2014
Сообщений: 161
14.06.2015, 23:56  [ТС]
OwenGlendower, при побитовом ИЛИ на выходе не 16 число
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,851
Записей в блоге: 1
15.06.2015, 02:41
Salems, ты что-то путаешь. Объединяя два байта с помощью сдвига и ИЛИ мы получим именно 16-и битовое число.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.06.2015, 02:41
Помогаю со студенческими работами здесь

Хеш-функция и хеш-таблица
Всем привет, написал хеш-функцию для строки: #include &lt;iostream&gt; //Главная библиотека #include &lt;string&gt; //Библиотека для...

Функция преобразовать десятичное число в шестнадцатиричное
Излазил всё что можно не могу найти функцию преобразовать десятичное число в шестнадцатиричное. Наверное такой фукции нету.

Как преобразовать число в массив?
Мне нужно ввести шестизначное число с клавиатуры и обращаться к этому числу как к массиву, чтобы сложить 0,1 и 2 элемент и отдельно сложить...

Преобразовать число в обратный массив
Есть число long, необходимо преобразовать пораздрядно в обратный long массив Пример: 348597 =&gt; Намудил где то с разрядностью не...

Преобразовать число в массив байт
Приветствую уважаемые форумчане, есть задача преобразовать целое число с максимальным значением 16777215 или в HEX = FFFFFF. Число...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru