Ответ 1
Документация для криптографии: http://nodejs.org/api/crypto.html
var crypto = require('crypto')
, text = 'I love cupcakes'
, key = 'abcdeg'
, hash
hash = crypto.createHmac('sha1', key).update(text).digest('hex')
Я хочу создать хэш из "I love cupcakes
" (подписан с ключом "abcdeg" )
Как создать этот хэш, используя Node.js Crypto?
Документация для криптографии: http://nodejs.org/api/crypto.html
var crypto = require('crypto')
, text = 'I love cupcakes'
, key = 'abcdeg'
, hash
hash = crypto.createHmac('sha1', key).update(text).digest('hex')
Несколько лет назад было сказано, что update()
и digest()
являются устаревшими методами, и был введен новый подход API потоковой передачи. Теперь документы говорят, что можно использовать любой из этих методов. Например:
var crypto = require('crypto');
var text = 'I love cupcakes';
var secret = 'abcdeg'; //make this your secret!!
var algorithm = 'sha1'; //consider using sha256
var hash, hmac;
// Method 1 - Writing to a stream
hmac = crypto.createHmac(algorithm, secret);
hmac.write(text); // write in to the stream
hmac.end(); // can't read from the stream until you call end()
hash = hmac.read().toString('hex'); // read out hmac digest
console.log("Method 1: ", hash);
// Method 2 - Using update and digest:
hmac = crypto.createHmac(algorithm, secret);
hmac.update(text);
hash = hmac.digest('hex');
console.log("Method 2: ", hash);
Протестировано на node v6.2.2 и v7.7.2
См. https://nodejs.org/api/crypto.html#crypto_class_hmac. Дает больше примеров использования потокового подхода.
Решение Gwerder не работает, потому что hash = hmac.read();
происходит до завершения потока. Таким образом, проблемы AngraX. Также в этом примере оператор hmac.write
не нужен.
Вместо этого сделайте следующее:
var crypto = require('crypto');
var hmac;
var algorithm = 'sha1';
var key = 'abcdeg';
var text = 'I love cupcakes';
var hash;
hmac = crypto.createHmac(algorithm, key);
// readout format:
hmac.setEncoding('hex');
//or also commonly: hmac.setEncoding('base64');
// callback is attached as listener to stream finish event:
hmac.end(text, function () {
hash = hmac.read();
//...do something with the hash...
});
Более формально, если хотите, строка
hmac.end(text, function () {
может быть записано
hmac.end(text, 'utf8', function () {
потому что в этом примере текст - это строка utf
var password = crypto.createHash('sha1').update(text).digest("hex");