SHA-1 может хешировать быть чисто числовым?

Быстрый и элегантный способ с использованием деструктуризации и уменьшения объектов es6.

. Он работает в O (n) (1 итерация по массиву) и не повторяет значения, которые появляются более чем в 2 времена

const arr = ['hi', 'hi', 'hi', 'bye', 'bye', 'asd']
const {
  dup
} = arr.reduce(
  (acc, curr) => {
    acc.items[curr] = acc.items[curr] ? acc.items[curr] += 1 : 1
    if (acc.items[curr] === 2) acc.dup.push(curr)
    return acc
  }, {
    items: {},
    dup: []
  },
)

console.log(dup)
// ['hi', 'bye']
5
задан Ryan McCue 27 June 2009 в 09:23
поделиться

3 ответа

технически хэш SHA1 - это число, просто он чаще всего кодируется в базе 16 (что и делает PHP sha1 ()), так что почти всегда в нем есть буква. Однако нет никакой гарантии.

Шансы 160-битного числа в шестнадцатеричном коде без цифр AF равны (10/16) 40 или примерно 6,84227766 × 10 -9

17
ответ дан 18 December 2019 в 07:31
поделиться

Хэш SHA-1 представляет собой 160-битное число. Для удобства записи обычно пишут в шестнадцатеричной системе счисления. Шестнадцатеричные (основание 16) цифры - это 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e и f. В буквах нет ничего особенного. Каждый шестнадцатеричный символ эквивалентен 4 битам, что означает, что хэш может быть записан в 40 символов.

Я не верю, что есть какая-либо причина, по которой хеш SHA-1 не может содержать никаких букв, но это маловероятно. Это похоже на генерацию случайного числа из 40 цифр (с основанием 10) и отсутствие семерки, восьмерки или девятки.

3
ответ дан 18 December 2019 в 07:31
поделиться

Вы можете представить вывод SHA1 (как и любые двоичные данные) в любой базе, которую хотите. В частности, вы можете закодировать результат в формате base-8/10.

1
ответ дан 18 December 2019 в 07:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: