Node.js: Создание MD5 ha sh с модулем Crypto полностью асинхронным? - PullRequest
0 голосов
/ 04 мая 2020

Рассматривая этот фрагмент кода в среде Node 11 и используя стандартный модуль шифрования, у меня есть два вопроса (и просто чтобы избежать недоразумений: я просто вычисляю MD5 ha sh на основе строки - без шифрования, нет конфиденциальных данных):

exports.calculateSomeHash = function(somestring, cb){
    var somehash = crypto.createHash('md5').update(somestring).digest('hex').toString();
    cb(null, somehash);   
};

1) Возможно, calculateSomeHa sh () когда-либо вернет пустое (someha sh) значение, поскольку расчет ha sh может быть не полностью завершен, как только обратный вызов запущен?

2) Является ли этот алгоритм хеширования криптовалютного модуля Node полностью асинхронным и неблокирующим? Если нет, какие-либо рекомендации о том, что использовать в качестве альтернативы? Как насчет, например, Hasha ?

1 Ответ

1 голос
/ 05 мая 2020

Все эти методы являются блокирующими и синхронными:

crypto.createHash()
hash.update()
hash.digest()
.toString()

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

exports.calculateSomeHash = function(somestring){
    return crypto.createHash('md5').update(somestring).digest('hex').toString();
};

FYI, криптографическая библиотека имеет некоторые асинхронные методы, но это не те, которые являются асинхронными. 1026 * () когда-либо возвращать пустое (someha sh) значение, поскольку вычисление ha sh может быть не завершено полностью, как только будет запущен обратный вызов?

Нет. Они синхронны. У них нет проблем, связанных с синхронизацией.

Является ли этот алгоритм хеширования криптомодуля узла полностью асинхронным и неблокирующим?

Нет. Это синхронно и блокирующе. Имеет ли это значение для вас, возможно, зависит от размера данных.

Кажется, что встроенный модуль шифрования не имеет асинхронных опций ha sh, встроенных в node.js. Поскольку хеширование - это исключительно работа ЦП, единственный способ сделать их неблокирующими и асинхронными - это использовать собственные потоки в собственном коде, использовать WorkerThread или использовать child_process. Все эти параметры создают дополнительные накладные расходы, которые, вероятно, обычно не нужны. Но, если это действительно проблема для вас, вы могли бы развернуть WorkerThread, а затем отправить ему строку, которую вы хотели ha sh of, и он мог бы вернуть вам значение ha sh.

Вы можете посмотреть на модуль bcrypt , который имеет некоторое асинхронное хеширование, но это не совсем та же функциональность, поэтому вам нужно будет посмотреть, соответствует ли он вашим потребностям.

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