Самый быстрый алгоритм хеширования на ваше мнение - 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;
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.364 из 5
Похожие ответы