जवाबों:
Crypto.createHash (एल्गोरिथ्म) पर एक नज़र डालें
var filename = process.argv[2];
var crypto = require('crypto');
var fs = require('fs');
var md5sum = crypto.createHash('md5');
var s = fs.ReadStream(filename);
s.on('data', function(d) {
md5sum.update(d);
});
s.on('end', function() {
var d = md5sum.digest('hex');
console.log(d + ' ' + filename);
});
यदि आप बस एक साधारण स्ट्रिंग md5 हैश करना चाहते हैं तो मुझे यह काम मेरे लिए मिला।
var crypto = require('crypto');
var name = 'braitsch';
var hash = crypto.createHash('md5').update(name).digest('hex');
console.log(hash); // 9b74c9897bac770ffc029102a200c5de
require('crypto').createHash('md5').update(STRING_TO_BE_HASHED).digest("hex")
आपको वन-लाइनर मिला चीयर्स दोस्त!
.update
कई बार ( github.com/joyent/node/issues/749 ) का उपयोग करके कुछ मुद्दों को प्राप्त कर रहा था, जब timbooo
एक-लाइनर का उपयोग करके इसे ठीक करने की कोशिश कर रहा था (क्योंकि हैश ऑब्जेक्ट को हर बार फिर से बनाया गया है)।
नोड का क्रिप्टो मॉड्यूल एपीआई अभी भी अस्थिर है।
संस्करण 4.0.0 के रूप में, देशी क्रिप्टो मॉड्यूल अब अस्थिर नहीं है। से आधिकारिक दस्तावेज :
क्रिप्टो
स्थिरता: 2 - स्थिर
एपीआई संतोषजनक साबित हुआ है। एनपीएम पारिस्थितिकी तंत्र के साथ संगतता एक उच्च प्राथमिकता है, और जब तक बिल्कुल आवश्यक नहीं तोड़ा नहीं जाएगा।
तो, इसे बाहरी निर्भरता के बिना, मूल कार्यान्वयन का उपयोग करने के लिए सुरक्षित माना जाना चाहिए।
संदर्भ के लिए, क्रिप्टो मॉड्यूल अभी भी अस्थिर होने पर वैकल्पिक समाधान के रूप में उल्लिखित मॉड्यूल का सुझाव दिया गया था।
आप मॉड्यूल sha1 या md5 में से एक का भी उपयोग कर सकते हैं जो दोनों काम करते हैं।
$ npm install sha1
और फिर
var sha1 = require('sha1');
var hash = sha1("my message");
console.log(hash); // 104ab42f1193c336aa2cf08a2c946d5c6fd0fcdb
या
$ npm install md5
और फिर
var md5 = require('md5');
var hash = md5("my message");
console.log(hash); // 8ba6c19dc1def5702ff5acbf2aeea5aa
(MD5 असुरक्षित है लेकिन अक्सर Gravatar जैसी सेवाओं द्वारा उपयोग किया जाता है।)
इन मॉड्यूल का एपीआई नहीं बदलेगा!
crypto
मॉड्यूल नहीं बनाया गया था। एक और लाभ यह है कि आप सर्वर पर मेरे मॉड्यूल के साथ-साथ क्लाइंट पक्ष का उपयोग कर सकते हैं। लेकिन यह पूरी तरह से आप पर निर्भर करता है कि आप किस पुस्तकालय का उपयोग करते हैं।
sha256("string or binary");
मैंने अन्य उत्तर के साथ समस्या का अनुभव किया। मैं आपको सलाह देता हूं binary
कि बाइट स्ट्रिंग का उपयोग करने के लिए एन्कोडिंग तर्क सेट करें और जावास्क्रिप्ट (NodeJS) और पायथन, पीएचपी, जीथब जैसी अन्य लैंगेज / सर्विस के बीच अलग-अलग हैश को रोकें ...
यदि आप इस कोड का उपयोग नहीं करते हैं, तो आप NodeJS और पायथन के बीच एक अलग हैश प्राप्त कर सकते हैं ...
NodeJS UTF-8 स्ट्रिंग का प्रतिनिधित्व करता है। अन्य भाषाएं (जैसे पायथन, पीएचपी या पर्ल ...) बाइट स्ट्रिंग में हैशिंग हैं।
बाइट स्ट्रिंग का उपयोग करने के लिए हम बाइनरी तर्क जोड़ सकते हैं ।
कोड:
const crypto = require("crypto");
function sha256(data) {
return crypto.createHash("sha256").update(data, "binary").digest("base64");
// ------ binary: hash the byte string
}
sha256("string or binary");
प्रलेखन:
आप इस मुद्दे को प्राप्त कर सकते हैं: sha256 ("\ xac"), "\ xd1", "\ xb9", "\ xe2", "\ xbb", "\ x93", आदि ...
अन्य भाषाएँ (जैसे PHP, पायथन, पर्ल ...) और मेरे समाधान के साथ .update(data, "binary")
:
sha1("\xac") //39527c59247a39d18ad48b9947ea738396a3bc47
डिफ़ॉल्ट रूप से (बिना बाइनरी) Nodejs:
sha1("\xac") //f50eb35d94f1d75480496e54f4b4a472a9148752
यहां आप अपने हार्डवेयर पर सभी समर्थित हैश को नोड.जेएस के अपने संस्करण द्वारा बेंचमार्क कर सकते हैं। कुछ क्रिप्टोग्राफिक हैं, और कुछ सिर्फ एक चेकसम के लिए हैं। प्रत्येक एल्गोरिथ्म के लिए इसकी गणना "हैलो वर्ल्ड" 1 मिलियन बार। प्रत्येक एल्गोरिदम के लिए लगभग 1-15 सेकंड लग सकते हैं (मानक Google कम्प्यूटिंग इंजन पर Node.js 4.2.2 के साथ परीक्षण किया गया)।
for(var i1=0;i1<crypto.getHashes().length;i1++){
var Algh=crypto.getHashes()[i1];
console.time(Algh);
for(var i2=0;i2<1000000;i2++){
crypto.createHash(Algh).update("Hello World").digest("hex");
}
console.timeEnd(Algh);
}
परिणाम:
DSA: 1992ms
DSA-SHA: 1960ms
DSA-SHA1: 2062ms
DSA-SHA1-old: 2124ms
RSA-MD4: 1893ms
RSA-MD5: 1982ms
RSA-MDC2: 2797ms
RSA-RIPEMD160
: 2101ms
RSA-SHA1 : 1948 : 1908ms
RSA-SHA1-2: 2042ms
RSA-SHA224: 2176ms
RSA-SHA256: 2158ms
RSA-SHA384: 2290ms
RSA-SHA512: 2357ms
dsaEncryption: 1936ms
dsaWithSHA: 1910ms
dsaWithSHA1: 1926ms
dss1: 1928ms
ECDSA-साथ-SHA1: 1880ms
MD4: 1833ms md4WithRSAEnc
एन्क्रिप्शन: 1925ms
md5: 1863ms
md5WithRSAEnc एन्क्रिप्शन: 1923ms
mdc2: 2729ms
mdc2WithRSA: 2890ms
ripemd: 2101ms
ripemd160: 2153ms
ripemd160WithRSA: 2210ms
rmd160: 2146ms
शा: 1929ms
SHA1: 1880ms
sha1WithRSAEncryption: 1957ms
sha224: 2121ms
sha224WithRSAEncryption: 2290ms
SHA256: 2134ms
sha256WithRSAEncryption: 2190ms
SHA384: 2181ms
sha384WithRSAEncryption: 2343ms
SHA512: 2371ms
sha512WithRSAEncryption: 2434ms
shaWithRSAEncryption: 1966ms
ssl2- md5: 1853ms
ssl3-md5: 1868ms
ssl3-sha1: 1971ms
भँवर: 2578ms
RSA-
उपसर्ग क्या करते हैं?
सरल एक लाइनर:
यदि आप UTF8 टेक्स्ट हैश चाहते हैं:
const hash = require('crypto').createHash('sha256').update('Hash me', 'utf8').digest('hex');
यदि आप पायथन, पीएचपी, पर्ल, जीथूब के साथ एक ही हैश प्राप्त करना चाहते हैं:
const hash = require('crypto').createHash('sha256').update('Hash me', 'binary').digest('hex');
तुम भी जगह ले सकता है 'sha256'
के साथ 'sha1'
, 'md5'
, 'sha256'
,'sha512'
Http://www.thoughtcrime.org/blog/the-cryptographic-doom-principle/ (संक्षेप में: FIRST एन्क्रिप्ट, फिर प्रमाणित करें। बाद में सत्यापित करें, फिर से डिक्रिप्ट) से विचारों को ध्यान में रखते हुए मैंने नोड में निम्न समाधान लागू किया है। js:
function encrypt(text,password){
var cipher = crypto.createCipher(algorithm,password)
var crypted = cipher.update(text,'utf8','hex')
crypted += cipher.final('hex');
return crypted;
}
function decrypt(text,password){
var decipher = crypto.createDecipher(algorithm,password)
var dec = decipher.update(text,'hex','utf8')
dec += decipher.final('utf8');
return dec;
}
function hashText(text){
var hash = crypto.createHash('md5').update(text).digest("hex");
//console.log(hash);
return hash;
}
function encryptThenAuthenticate(plainText,pw)
{
var encryptedText = encrypt(plainText,pw);
var hash = hashText(encryptedText);
return encryptedText+"$"+hash;
}
function VerifyThenDecrypt(encryptedAndAuthenticatedText,pw)
{
var encryptedAndHashArray = encryptedAndAuthenticatedText.split("$");
var encrypted = encryptedAndHashArray[0];
var hash = encryptedAndHashArray[1];
var hash2Compare = hashText(encrypted);
if (hash === hash2Compare)
{
return decrypt(encrypted,pw);
}
}
इसके साथ परीक्षण किया जा सकता है:
var doom = encryptThenAuthenticate("The encrypted text",user.cryptoPassword);
console.log(VerifyThenDecrypt(doom,user.cryptoPassword));
उम्मीद है की यह मदद करेगा :-)
मैं ब्लिंप-md5 का उपयोग करता हूं, जो "सर्वर साइड वातावरण जैसे Node.js, मॉड्यूल लोडर जैसे आवश्यकताएँ, Browserify या वेबपैक और सभी वेब ब्राउज़र के साथ संगत है।"
इसे इस तरह उपयोग करें:
var md5 = require("blueimp-md5");
var myHashedString = createHash('GreensterRox');
createHash(myString){
return md5(myString);
}
अगर खुले में चारों ओर हैशेड मान गुजरते हैं, तो उन्हें नमक करना हमेशा एक अच्छा विचार होता है ताकि लोगों के लिए उन्हें फिर से बनाना कठिन हो:
createHash(myString){
var salt = 'HnasBzbxH9';
return md5(myString+salt);
}
function md5(a) {
var r = 0,
c = "";
return h(a);
function h(t) {
return u(l(m(t)))
}
function l(t) {
return p(g(f(t), 8 * t.length))
}
function u(t) {
for (var e, i = r ? "0123456789ABCDEF" : "0123456789abcdef", n = "", o = 0; o < t.length; o++)
e = t.charCodeAt(o),
n += i.charAt(e >>> 4 & 15) + i.charAt(15 & e);
return n
}
function m(t) {
for (var e, i, n = "", o = -1; ++o < t.length;)
e = t.charCodeAt(o),
i = o + 1 < t.length ? t.charCodeAt(o + 1) : 0,
55296 <= e && e <= 56319 && 56320 <= i && i <= 57343 && (e = 65536 + ((1023 & e) << 10) + (1023 & i),
o++),
e <= 127 ? n += String.fromCharCode(e) : e <= 2047 ? n += String.fromCharCode(192 | e >>> 6 & 31, 128 | 63 & e) : e <= 65535 ? n += String.fromCharCode(224 | e >>> 12 & 15, 128 | e >>> 6 & 63, 128 | 63 & e) : e <= 2097151 && (n += String.fromCharCode(240 | e >>> 18 & 7, 128 | e >>> 12 & 63, 128 | e >>> 6 & 63, 128 | 63 & e));
return n
}
function f(t) {
for (var e = Array(t.length >> 2), i = 0; i < e.length; i++)
e[i] = 0;
for (i = 0; i < 8 * t.length; i += 8)
e[i >> 5] |= (255 & t.charCodeAt(i / 8)) << i % 32;
return e
}
function p(t) {
for (var e = "", i = 0; i < 32 * t.length; i += 8)
e += String.fromCharCode(t[i >> 5] >>> i % 32 & 255);
return e
}
function g(t, e) {
t[e >> 5] |= 128 << e % 32,
t[14 + (e + 64 >>> 9 << 4)] = e;
for (var i = 1732584193, n = -271733879, o = -1732584194, s = 271733878, a = 0; a < t.length; a += 16) {
var r = i,
c = n,
h = o,
l = s;
n = E(n = E(n = E(n = E(n = N(n = N(n = N(n = N(n = C(n = C(n = C(n = C(n = S(n = S(n = S(n = S(n, o = S(o, s = S(s, i = S(i, n, o, s, t[a + 0], 7, -680876936), n, o, t[a + 1], 12, -389564586), i, n, t[a + 2], 17, 606105819), s, i, t[a + 3], 22, -1044525330), o = S(o, s = S(s, i = S(i, n, o, s, t[a + 4], 7, -176418897), n, o, t[a + 5], 12, 1200080426), i, n, t[a + 6], 17, -1473231341), s, i, t[a + 7], 22, -45705983), o = S(o, s = S(s, i = S(i, n, o, s, t[a + 8], 7, 1770035416), n, o, t[a + 9], 12, -1958414417), i, n, t[a + 10], 17, -42063), s, i, t[a + 11], 22, -1990404162), o = S(o, s = S(s, i = S(i, n, o, s, t[a + 12], 7, 1804603682), n, o, t[a + 13], 12, -40341101), i, n, t[a + 14], 17, -1502002290), s, i, t[a + 15], 22, 1236535329), o = C(o, s = C(s, i = C(i, n, o, s, t[a + 1], 5, -165796510), n, o, t[a + 6], 9, -1069501632), i, n, t[a + 11], 14, 643717713), s, i, t[a + 0], 20, -373897302), o = C(o, s = C(s, i = C(i, n, o, s, t[a + 5], 5, -701558691), n, o, t[a + 10], 9, 38016083), i, n, t[a + 15], 14, -660478335), s, i, t[a + 4], 20, -405537848), o = C(o, s = C(s, i = C(i, n, o, s, t[a + 9], 5, 568446438), n, o, t[a + 14], 9, -1019803690), i, n, t[a + 3], 14, -187363961), s, i, t[a + 8], 20, 1163531501), o = C(o, s = C(s, i = C(i, n, o, s, t[a + 13], 5, -1444681467), n, o, t[a + 2], 9, -51403784), i, n, t[a + 7], 14, 1735328473), s, i, t[a + 12], 20, -1926607734), o = N(o, s = N(s, i = N(i, n, o, s, t[a + 5], 4, -378558), n, o, t[a + 8], 11, -2022574463), i, n, t[a + 11], 16, 1839030562), s, i, t[a + 14], 23, -35309556), o = N(o, s = N(s, i = N(i, n, o, s, t[a + 1], 4, -1530992060), n, o, t[a + 4], 11, 1272893353), i, n, t[a + 7], 16, -155497632), s, i, t[a + 10], 23, -1094730640), o = N(o, s = N(s, i = N(i, n, o, s, t[a + 13], 4, 681279174), n, o, t[a + 0], 11, -358537222), i, n, t[a + 3], 16, -722521979), s, i, t[a + 6], 23, 76029189), o = N(o, s = N(s, i = N(i, n, o, s, t[a + 9], 4, -640364487), n, o, t[a + 12], 11, -421815835), i, n, t[a + 15], 16, 530742520), s, i, t[a + 2], 23, -995338651), o = E(o, s = E(s, i = E(i, n, o, s, t[a + 0], 6, -198630844), n, o, t[a + 7], 10, 1126891415), i, n, t[a + 14], 15, -1416354905), s, i, t[a + 5], 21, -57434055), o = E(o, s = E(s, i = E(i, n, o, s, t[a + 12], 6, 1700485571), n, o, t[a + 3], 10, -1894986606), i, n, t[a + 10], 15, -1051523), s, i, t[a + 1], 21, -2054922799), o = E(o, s = E(s, i = E(i, n, o, s, t[a + 8], 6, 1873313359), n, o, t[a + 15], 10, -30611744), i, n, t[a + 6], 15, -1560198380), s, i, t[a + 13], 21, 1309151649), o = E(o, s = E(s, i = E(i, n, o, s, t[a + 4], 6, -145523070), n, o, t[a + 11], 10, -1120210379), i, n, t[a + 2], 15, 718787259), s, i, t[a + 9], 21, -343485551),
i = v(i, r),
n = v(n, c),
o = v(o, h),
s = v(s, l)
}
return [i, n, o, s]
}
function _(t, e, i, n, o, s) {
return v((a = v(v(e, t), v(n, s))) << (r = o) | a >>> 32 - r, i);
var a, r
}
function S(t, e, i, n, o, s, a) {
return _(e & i | ~e & n, t, e, o, s, a)
}
function C(t, e, i, n, o, s, a) {
return _(e & n | i & ~n, t, e, o, s, a)
}
function N(t, e, i, n, o, s, a) {
return _(e ^ i ^ n, t, e, o, s, a)
}
function E(t, e, i, n, o, s, a) {
return _(i ^ (e | ~n), t, e, o, s, a)
}
function v(t, e) {
var i = (65535 & t) + (65535 & e);
return (t >> 16) + (e >> 16) + (i >> 16) << 16 | 65535 & i
}
}
string = 'hello';
console.log(md5(string));
भले ही हैश सुरक्षा के लिए नहीं है, आप md5 के बजाय sha का उपयोग कर सकते हैं। मेरी राय में, लोगों को अभी के लिए md5 के बारे में भूलना चाहिए, यह अतीत में है!
सामान्य नोडज sha256 पदावनत है। तो, आपके पास अभी दो विकल्प हैं:
var shajs = require('sha.js') - https://www.npmjs.com/package/sha.js (used by Browserify)
var hash = require('hash.js') - https://github.com/indutny/hash.js
मैं shajs
इसके बजाय का उपयोग करना पसंद करता हूं hash
, क्योंकि मैं आजकल शा सबसे अच्छा हैश फ़ंक्शन मानता हूं और आपको अब के लिए एक अलग हैश फ़ंक्शन की आवश्यकता नहीं है। तो हेक्स में कुछ हैश पाने के लिए आपको निम्न की तरह कुछ करना चाहिए:
sha256.update('hello').digest('hex')