Я хочу создать хеш I love cupcakes
(подписанный ключом abcdeg
)
Как я могу создать этот хеш, используя Node.js Crypto?
javascript
node.js
algorithm
hash
node-crypto
user847495
источник
источник
crypto.timingSafeEqual(Buffer.from(a), Buffer.from(b))
: stackoverflow.com/questions/31095905/…Несколько лет назад было сказано , что
update()
иdigest()
были устаревшие методы и был введен новый потоковый API подход. Теперь в документах говорится, что любой метод может быть использован. Например:Протестировано на узле v6.2.2 и v7.7.2
См. Https://nodejs.org/api/crypto.html#crypto_class_hmac . Дает больше примеров для использования потокового подхода.
источник
update
а не оwrite
. Я в замешательстве, какая сейчас лучшая практика? Я не могу найти ресурсы, которые рассказывают об этом так же ясно, как вы это упоминаете.digest
иupdate
еще не были устаревшими и описаны в документации: nodejs.org/api/crypto.html#crypto_class_hmac . Я рекомендую использовать потоковый API, только если вы читаете из потока.Решение Gwerder не сработает, потому что оно
hash = hmac.read();
происходит до того, как поток будет завершен и завершен. Таким образом, проблемы AngraX. Кроме того,hmac.write
утверждение не является необходимым в этом примере.Вместо этого сделайте это:
Более формально, если хотите, строка
может быть написано
потому что в этом примере текст является строкой UTF
источник
It is a stream that is both readable and writable. The written data is used to compute the hmac. Once the writable side of the stream is ended, use the read() method to get the computed digest.
Вы читаете его, когда заканчивается сторона , доступная для записи , вам даже не нужно ждать, когда сторона, доступная для чтения, станет читаемой (хотя, безусловно, это так). Прочитайте свою документацию, пожалуйста.hmac.end(...)
что был вызван, « конец » означает, что поток вызвал событие завершения , поэтому команда принимает обратный вызов. После вызова метода end () потоку требуется время для сброса данных в базовую систему. Если вы вызовите read () до того, как будет завершено событие финиша, произойдет сбой. Идите вперед и вставьте код Gwerder в JSbin и убедитесь сами. Вы должны читать документацию по Streams, чтобы понять, как она работает.read()
когда завершается доступная для записи сторона, и нет ничего о завершающем событии.