मैं एक हैश I love cupcakes
(कुंजी के साथ हस्ताक्षरित abcdeg
) बनाना चाहता हूं
Node.js Crypto का उपयोग करके मैं वह हैश कैसे बना सकता हूं?
मैं एक हैश 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')
crypto.timingSafeEqual(Buffer.from(a), Buffer.from(b))
: stackoverflow.com/questions/31095905/…
कुछ साल पहले यह कहा गया था कि update()
और digest()
विरासत के तरीके थे और नए स्ट्रीमिंग एपीआई दृष्टिकोण को पेश किया गया था। अब डॉक्स का कहना है कि या तो विधि का उपयोग किया जा सकता है। उदाहरण के लिए:
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 देखें । स्ट्रीमिंग दृष्टिकोण का उपयोग करने के लिए अधिक उदाहरण देता है।
update
या नहीं write
। मैं भ्रमित हूँ, जो अब सबसे अच्छा अभ्यास है? मुझे ऐसे संसाधन नहीं मिलेंगे जो यह बताएं कि जितना स्पष्ट रूप से आप इसका उल्लेख करते हैं।
digest
और update
है नहीं जिसे बंद कर दिया और दस्तावेज में विशेष रुप से प्रदर्शित कर रहे हैं: 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'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 स्ट्रिंग है
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(...)
कहा गया है, " समाप्त " का अर्थ है कि स्ट्रीम ने अपना फिनिश इवेंट उठाया है , यही वजह है कि कमांड एक कॉलबैक स्वीकार करता है। अंत () विधि कहा जाता है के बाद, स्ट्रीम को अंतर्निहित सिस्टम में डेटा को फ्लश करने के लिए समय की आवश्यकता होती है। यदि आप फिनिश इवेंट को पूरा करने से पहले रीड () कहते हैं, तो यह विफल हो जाएगा। आगे बढ़ो और जेस्बिन में गॉडर के कोड को पेस्ट करें और अपने लिए देखें। आपको यह समझने के लिए कि यह कैसे काम करता है , धाराओं के दस्तावेज को पढ़ना चाहिए ।
read()
जब लेखन पक्ष समाप्त हो गया है, और फिनिश इवेंट के बारे में कुछ भी नहीं है।