나는의 해시 만들려면 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 문자열이기 때문에