.NET 4.x Хеш-функция - преобразовать массив в шестнадцатибитное число - C#
Формулировка задачи:
Здравствуйте,задача: на входе байт массив(из любого файла),нужно высчитать хеш функцию(алгоритм формирования побитовое исключение ИЛИ пар байт исходного сообщения,размер хеш-функции 16 бит).Побитовое исключение сделал.Вопрос как дальше преобразовать данный массив в 16 битное число или какой шаг нужно добавить?и нужно ли что-то делать с длиной массива при чтении?
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++;
}Решение задачи: «.NET 4.x Хеш-функция - преобразовать массив в шестнадцатибитное число»
textual
Листинг программы
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];