Как обычно работают хеш-функции -
Алгоритмы хеширования создают цифровой отпечаток данных, обычно называемый дайджест или хеш.Вы прежде всего видите алгоритмы хеширования, используемые для целей сравнения, а не для шифрования.
Алгоритмы безопасного хеширования имеют некоторые фундаментальные характеристики, такие как:
- Необратимый ( односторонняя функция ).Вы не можете определить исходный набор данных из Дайджеста.
- Дайджест будет иметь фиксированный размер независимо от размера исходных данных.
- Уникальный.Два разных набора данных не могут создать один и тот же дайджест.
Какой алгоритм и какую библиотеку использовать?
Я бы порекомендовал SHA-2 (SHA-256 или SHA-512) в качестве алгоритма хеширования и используют криптографический модуль .Он предоставляет криптографическую функциональность и набор оболочек для хеш-функций, HMAC, шифрования, дешифрования, подписи и проверки функций OpenSSL.
Итак, допустим, у нас есть следующая информация ( user.id, user.email, user.password, timestamp ), объединить его и передать в качестве параметра данных.
const hash = function hash(data){
// Returns a buffer containing raw bytes and converts to string
const salt = crypto.randomBytes(128).toString('base64')
// Creates and returns a Hmac object that uses the given algorithm
const hmac = crypto.createHmac('sha512', salt)
// Updates the Hmac object content with the given data
hmac.update(data)
// Calculates the digest of all of the data passed to be hashed
const digest = hmac.digest('hex')
return {
'salt' : salt,
'digest': digest
}
}
Запуск вышеуказанной функции с теми же данными, но другой солью приведет к совершенно другому дайджесту.