используя этот код, как узнать, будут ли использоваться sha256 или sha512? - PullRequest
1 голос
/ 04 октября 2019
  1. Глупый вопрос, в приведенном ниже коде, учитывая имя sha512.New512_256, 512 или 256 используется? Как вы контролируете, что вы хотите? Я знаю, что упускаю что-то элементарное здесь ..

  2. Кроме того, поскольку я смотрю больше на это, я задаюсь вопросом, не является ли hmac тем, чего я хочу вообще ... Яищу создание небольших утилит хеширования, которые будут хэшировать любые строковые входные данные или файлы, заданные в качестве параметров. Я бы также указал тип хэша, который будет использоваться в качестве входного параметра ... поэтому я ожидаю, что тот же результат хеширования для того же алгоритма хеширования, который используется в одном и том же файле или строке каждый раз ... должен ли я использовать что-то еще?

спасибо

import (
    "crypto/hmac"
    "crypto/sha512"
)

func Hash(tag string, data []byte) []byte {
    h := hmac.New(sha512.New512_256, []byte(tag))
    h.Write(data)
    return h.Sum(nil)
}

1 Ответ

2 голосов
/ 04 октября 2019

SHA512 входит в семейства SHA-2. Варианты перечислены в NIST FIPS 180-4

- SHA-512/256 truncated from SHA-512 with different initial values 
- SHA-512/224 truncated from SHA-512 with different initial values
- SHA-384     truncated from SHA-512 with different initial values
- SHA-512

- SHA-224     truncated from SHA-256 with different initial values
- SHA-256

Чтобы отделить домены (называемые разделение доменов ) этих хеш-функций от их усеченной версии, отличной от начальнойзначения используются. В противном случае атака на усеченную версию может быть перенесена в другие версии, vv

  • первый вопрос

С sha512.New512_256 вы на самом деле выбираете хеш-функцию из SHA-512, и в этом случае это SHA-512/256. Вы можете выбрать другие из списка godoc.org, посмотрев их строку.

  • второй вопрос

Возможно, вам понадобится hash, а не hmac. HMAC - это код аутентификации сообщений на основе хеш-кода с ключом , полезный для аутентификации с помощью ключа. Каждый раз для управления хешем (или контрольной суммой) вам понадобится ключ.

Библиотека, однако, использует Sum512 или Sum512_256 и т. Д. Для вычисления контрольной суммы (хеша) заданных данных. ,Пример кода для вычисления хэша:

sha_512 := sha512.New()
sha_512.Write([]byte(input))
hash := base64.URLEncoding.EncodeToString(sha_512.Sum(nil))

На усечении

Сначала идея усечения может показаться несостоятельной ,На самом деле, это не. SHA-512 и SHA-256 имеют атаки расширения длины . Однако урезанные версии имеют сопротивление , см. Таблицу в Википедии .

Следует также отметить, что семейство SHA3 разработано так, чтобы иметь сопротивление против атак с удлинением длины. Емкость предотвращает атаки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...