Самый быстрый алгоритм хеширования на ваше мнение - C#
Формулировка задачи:
Добрый день! Нужно быстро взять хеши примерно 30 тысяч файлов. Какой алгоритм больше подойдет для такой цели на ваше мнение?
Попробовал немного(CRC32, md5 и еще один внизу написал). Из них быстрей всего справляется crc32.
public static unsafe string Calculate(Byte[] dataToHash) { Int32 dataLength = dataToHash.Length; if (dataLength == 0) return ""; UInt32 hash = (UInt32)dataLength; Int32 remainingBytes = dataLength & 3; // mod 4 Int32 numberOfLoops = dataLength >> 2; // div 4 fixed (byte* firstByte = &(dataToHash[0])) { /* Main loop */ UInt16* data = (UInt16*)firstByte; for (; numberOfLoops > 0; numberOfLoops--) { hash += *data; UInt32 tmp = (UInt32)(*(data + 1) << 11) ^ hash; hash = (hash << 16) ^ tmp; data += 2; hash += hash >> 11; } switch (remainingBytes) { case 3: hash += *data; hash ^= hash << 16; hash ^= ((UInt32)(*(((Byte*)(data)) + 2))) << 18; hash += hash >> 11; break; case 2: hash += *data; hash ^= hash << 11; hash += hash >> 17; break; case 1: hash += *((Byte*)data); hash ^= hash << 10; hash += hash >> 1; break; default: break; } } /* Force "avalanching" of final 127 bits */ hash ^= hash << 3; hash += hash >> 5; hash ^= hash << 4; hash += hash >> 17; hash ^= hash << 25; hash += hash >> 6; return hash.ToString(); }
Забыл пометить, что код который я привел называется SuperFastHash
http://landman-code.blogspot.ca/2008...aul-hsieh.html
Решение задачи: «Самый быстрый алгоритм хеширования на ваше мнение»
textual
Листинг программы
public static int Calculate(byte[] dataToHash) { int[] data = new int[dataToHash.Length / 4 + (dataToHash.Length % 4 == 0 ? 0 : 1)]; System.Buffer.BlockCopy(dataToHash, 0, data, 0, dataToHash.Length); var hash = dataToHash.Length; for (int x = 0; x < data.Length; x += 1) { hash ^= data[x]; } return hash; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д