Создание длинного хеш-кода MD5 или SHA1 (64 бита) - PullRequest
6 голосов
/ 16 февраля 2011

Мне нужно вычислить хеш-код строки и сохранить ее в переменной long.

MD5 и SHA1 создают хеш-коды длиной более 64 бит (MD5 - 128 бит, SHA1 - 160 бит).

Идеи есть у кого?

Приветствия

Дорон

Ответы [ 6 ]

4 голосов
/ 16 февраля 2011

Вы можете урезать хеш и использовать только первые 64 бита.Хеш будет несколько менее сильным, но первые 64 бита все еще очень вероятно будут уникальными.

Для большинства применений хэша это обычная и вполне приемлемая практика.

Вытакже может хранить полный хеш в двух 64-битных целых числах.

2 голосов
/ 20 января 2013

Я использую это (Java):

public class SimpleLongHash {
    final MessageDigest md;
    //
    public SimpleLongHash() throws NoSuchAlgorithmException {
        md = MessageDigest.getInstance("MD5");
    }
    //
    public long hash(final String str) {
        return hash(str.getBytes());
    }
    public long hash(final byte[] buf) {
        md.reset();
        final byte[] digest = md.digest(buf);
        return (getLong(digest, 0) ^ getLong(digest, 8));
    }
    //
    private static final long getLong(final byte[] array, final int offset) {
        long value = 0;
        for (int i = 0; i < 8; i++) {
            value = ((value << 8) | (array[offset+i] & 0xFF));
        }
        return value;
    }
}
1 голос
/ 16 февраля 2011

Хэш FNV довольно прост в реализации.Мы расширили его до 64 бит, и он работает очень хорошо.Его использование намного быстрее, чем вычисление MD5 или SHA1, а затем усечение результата.Однако мы не зависим от него для криптографических функций - только для хеш-таблиц и тому подобного.

Дополнительная информация о FNV, с исходным кодом и подробными объяснениями: http://isthe.com/chongo/tech/comp/fnv/

0 голосов
/ 10 апреля 2015

Какова будет вероятность коллизии в результате XOR между первыми 64 битами и последними 64 битами?

0 голосов
/ 02 марта 2011

Вы также можете поиграть с различными алгоритмами хеширования с помощью FooBabel Hasher

0 голосов
/ 16 февраля 2011

XOR биты вместе? Например. для MD5, биты 0-63, биты XOR 64-127, вуаля, 64 бита. Это даст вам более слабый хеш, проверьте, приемлемо ли это для вас.

(также, если ваша среда не ограничена крайне - например, встроенными устройствами - возникает вопрос "зачем вам нужно , чтобы сократить ее?")

...