[javascript] Node.js Crypto를 사용하여 HMAC-SHA1 해시를 작성하는 방법

나는의 해시 만들려면 I love cupcakes(키와 서명을 abcdeg)

Node.js Crypto를 사용하여 해시를 어떻게 만들 수 있습니까?



답변

암호화 문서 : http://nodejs.org/api/crypto.html

const crypto = require('crypto')

const text = 'I love cupcakes'
const key = 'abcdeg'

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);

노드 v6.2.2 및 v7.7.2에서 테스트

https://nodejs.org/api/crypto.html#crypto_class_hmac을 참조 하십시오 . 스트리밍 방식 사용에 대한 추가 예를 제공합니다.


답변

hash = hmac.read();스트림이 완료되기 전에 Gwerder의 솔루션이 작동하지 않습니다 . 따라서 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's finish event:
hmac.end(text, function () {
    hash = hmac.read();
    //...do something with the hash...
});

더 공식적으로, 원한다면 라인

hmac.end(text, function () {

쓸 수 있었다

hmac.end(text, 'utf8', function () {

이 예제에서 텍스트는 utf 문자열이기 때문에


답변