वहाँ कई MD5 जावास्क्रिप्ट कार्यान्वयन वहाँ हैं। क्या किसी को पता है कि कौन सा सबसे उन्नत, सबसे बग़ीचा और सबसे तेज़ है?
मुझे इस टूल के लिए इसकी आवश्यकता है ।
वहाँ कई MD5 जावास्क्रिप्ट कार्यान्वयन वहाँ हैं। क्या किसी को पता है कि कौन सा सबसे उन्नत, सबसे बग़ीचा और सबसे तेज़ है?
मुझे इस टूल के लिए इसकी आवश्यकता है ।
जवाबों:
मैंने सुना है कि यूसुफ का मायर्स कार्यान्वयन काफी तेज है। इसके अतिरिक्त, उन्होंने जावास्क्रिप्ट अनुकूलन पर एक लंबा लेख लिखा है जिसमें बताया गया है कि उन्होंने अपने कार्यान्वयन को लिखते समय क्या सीखा। यह प्रदर्शनकारी जावास्क्रिप्ट में रुचि रखने वाले किसी भी व्यक्ति के लिए एक अच्छा पढ़ा है।
var add32
ऑन लाइन १ be५ होना चाहिए add32
इसलिए मुझे सबसे अच्छा कांटा मिला और मैंने इसे इस नए संस्करण में अपडेट किया: gist.github.com/Michaeloteote/3f0cefaaa9578d7e30be
मैं आपको इस मामले में CryptoJS का उपयोग करने का सुझाव दूंगा।
मूल रूप से CryptoJS सर्वोत्तम प्रथाओं और पैटर्न का उपयोग करके जावास्क्रिप्ट में कार्यान्वित मानक और सुरक्षित क्रिप्टोग्राफ़िक एल्गोरिदम का एक बढ़ता हुआ संग्रह है। वे तेज़ हैं, और उनके पास एक सुसंगत और सरल इंटरफ़ेस है।
इसलिए यदि आप अपने पासवर्ड स्ट्रिंग के एमडी 5 हैश की गणना करना चाहते हैं तो निम्नानुसार करें:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/core.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/md5.js"></script>
<script>
var passhash = CryptoJS.MD5(password).toString();
$.post(
'includes/login.php',
{ user: username, pass: passhash },
onLogin,
'json' );
</script>
तो यह स्क्रिप्ट आपके पासवर्ड स्ट्रिंग के हैश को सर्वर पर पोस्ट कर देगी।
अन्य जानकारी और अन्य हैश गणना एल्गोरिदम पर आप यात्रा कर सकते हैं पर समर्थन के लिए:
लाइब्रेरी का चयन करते समय यह देखना भी महत्वपूर्ण है कि क्या यह बोवर जैसे आधुनिक फ्रेमवर्क का समर्थन करता है, jslint से गुजरता है, JQuery या मॉड्यूल सिस्टम के लिए प्लगइन मॉडल का समर्थन करता है जैसे कि सक्रिय विकास में होने के अलावा एएमडी / रिक्जेस्ट्स और 1 से अधिक योगदानकर्ता हैं। ऐसे कुछ विकल्प हैं जो इन अतिरिक्त मानदंडों में से कुछ या सभी को संतुष्ट करते हैं:
CryptoJS से उदाहरण:
//just include md5.js from the CryptoJS rollups folder
var hash = CryptoJS.MD5("Message");
console.log(hash.toString());
उपरोक्त पुस्तकालयों के बीच http://jsperf.com/md5-shootout/7 पर प्रदर्शन की तुलना है । मेरी मशीन पर वर्तमान परीक्षण (जो कि पुराने रूप से पुराने हैं) से पता चलता है कि यदि आप गति की तलाश कर रहे हैं तो स्पार्क एमडी 5 आपका सबसे अच्छा दांव है (और ऐसा ही सादा जेकेएम कोड है)। हालाँकि यदि आप अधिक व्यापक पुस्तकालय की तलाश में हैं तो CryptoJS आपकी सबसे अच्छी शर्त है, हालांकि स्पार्क MD5 की तुलना में यह 79% धीमा है। हालाँकि मुझे लगता है कि CryptoJS अंततः उसी गति को प्राप्त करेगा क्योंकि यह थोड़ी अधिक सक्रिय परियोजना है।
MD5 = function(e) {
function h(a, b) {
var c, d, e, f, g;
e = a & 2147483648;
f = b & 2147483648;
c = a & 1073741824;
d = b & 1073741824;
g = (a & 1073741823) + (b & 1073741823);
return c & d ? g ^ 2147483648 ^ e ^ f : c | d ? g & 1073741824 ? g ^ 3221225472 ^ e ^ f : g ^ 1073741824 ^ e ^ f : g ^ e ^ f
}
function k(a, b, c, d, e, f, g) {
a = h(a, h(h(b & c | ~b & d, e), g));
return h(a << f | a >>> 32 - f, b)
}
function l(a, b, c, d, e, f, g) {
a = h(a, h(h(b & d | c & ~d, e), g));
return h(a << f | a >>> 32 - f, b)
}
function m(a, b, d, c, e, f, g) {
a = h(a, h(h(b ^ d ^ c, e), g));
return h(a << f | a >>> 32 - f, b)
}
function n(a, b, d, c, e, f, g) {
a = h(a, h(h(d ^ (b | ~c), e), g));
return h(a << f | a >>> 32 - f, b)
}
function p(a) {
var b = "",
d = "",
c;
for (c = 0; 3 >= c; c++) d = a >>> 8 * c & 255, d = "0" + d.toString(16), b += d.substr(d.length - 2, 2);
return b
}
var f = [],
q, r, s, t, a, b, c, d;
e = function(a) {
a = a.replace(/\r\n/g, "\n");
for (var b = "", d = 0; d < a.length; d++) {
var c = a.charCodeAt(d);
128 > c ? b += String.fromCharCode(c) : (127 < c && 2048 > c ? b += String.fromCharCode(c >> 6 | 192) : (b += String.fromCharCode(c >> 12 | 224), b += String.fromCharCode(c >> 6 & 63 | 128)), b += String.fromCharCode(c & 63 | 128))
}
return b
}(e);
f = function(b) {
var a, c = b.length;
a = c + 8;
for (var d = 16 * ((a - a % 64) / 64 + 1), e = Array(d - 1), f = 0, g = 0; g < c;) a = (g - g % 4) / 4, f = g % 4 * 8, e[a] |= b.charCodeAt(g) << f, g++;
a = (g - g % 4) / 4;
e[a] |= 128 << g % 4 * 8;
e[d - 2] = c << 3;
e[d - 1] = c >>> 29;
return e
}(e);
a = 1732584193;
b = 4023233417;
c = 2562383102;
d = 271733878;
for (e = 0; e < f.length; e += 16) q = a, r = b, s = c, t = d, a = k(a, b, c, d, f[e + 0], 7, 3614090360), d = k(d, a, b, c, f[e + 1], 12, 3905402710), c = k(c, d, a, b, f[e + 2], 17, 606105819), b = k(b, c, d, a, f[e + 3], 22, 3250441966), a = k(a, b, c, d, f[e + 4], 7, 4118548399), d = k(d, a, b, c, f[e + 5], 12, 1200080426), c = k(c, d, a, b, f[e + 6], 17, 2821735955), b = k(b, c, d, a, f[e + 7], 22, 4249261313), a = k(a, b, c, d, f[e + 8], 7, 1770035416), d = k(d, a, b, c, f[e + 9], 12, 2336552879), c = k(c, d, a, b, f[e + 10], 17, 4294925233), b = k(b, c, d, a, f[e + 11], 22, 2304563134), a = k(a, b, c, d, f[e + 12], 7, 1804603682), d = k(d, a, b, c, f[e + 13], 12, 4254626195), c = k(c, d, a, b, f[e + 14], 17, 2792965006), b = k(b, c, d, a, f[e + 15], 22, 1236535329), a = l(a, b, c, d, f[e + 1], 5, 4129170786), d = l(d, a, b, c, f[e + 6], 9, 3225465664), c = l(c, d, a, b, f[e + 11], 14, 643717713), b = l(b, c, d, a, f[e + 0], 20, 3921069994), a = l(a, b, c, d, f[e + 5], 5, 3593408605), d = l(d, a, b, c, f[e + 10], 9, 38016083), c = l(c, d, a, b, f[e + 15], 14, 3634488961), b = l(b, c, d, a, f[e + 4], 20, 3889429448), a = l(a, b, c, d, f[e + 9], 5, 568446438), d = l(d, a, b, c, f[e + 14], 9, 3275163606), c = l(c, d, a, b, f[e + 3], 14, 4107603335), b = l(b, c, d, a, f[e + 8], 20, 1163531501), a = l(a, b, c, d, f[e + 13], 5, 2850285829), d = l(d, a, b, c, f[e + 2], 9, 4243563512), c = l(c, d, a, b, f[e + 7], 14, 1735328473), b = l(b, c, d, a, f[e + 12], 20, 2368359562), a = m(a, b, c, d, f[e + 5], 4, 4294588738), d = m(d, a, b, c, f[e + 8], 11, 2272392833), c = m(c, d, a, b, f[e + 11], 16, 1839030562), b = m(b, c, d, a, f[e + 14], 23, 4259657740), a = m(a, b, c, d, f[e + 1], 4, 2763975236), d = m(d, a, b, c, f[e + 4], 11, 1272893353), c = m(c, d, a, b, f[e + 7], 16, 4139469664), b = m(b, c, d, a, f[e + 10], 23, 3200236656), a = m(a, b, c, d, f[e + 13], 4, 681279174), d = m(d, a, b, c, f[e + 0], 11, 3936430074), c = m(c, d, a, b, f[e + 3], 16, 3572445317), b = m(b, c, d, a, f[e + 6], 23, 76029189), a = m(a, b, c, d, f[e + 9], 4, 3654602809), d = m(d, a, b, c, f[e + 12], 11, 3873151461), c = m(c, d, a, b, f[e + 15], 16, 530742520), b = m(b, c, d, a, f[e + 2], 23, 3299628645), a = n(a, b, c, d, f[e + 0], 6, 4096336452), d = n(d, a, b, c, f[e + 7], 10, 1126891415), c = n(c, d, a, b, f[e + 14], 15, 2878612391), b = n(b, c, d, a, f[e + 5], 21, 4237533241), a = n(a, b, c, d, f[e + 12], 6, 1700485571), d = n(d, a, b, c, f[e + 3], 10, 2399980690), c = n(c, d, a, b, f[e + 10], 15, 4293915773), b = n(b, c, d, a, f[e + 1], 21, 2240044497), a = n(a, b, c, d, f[e + 8], 6, 1873313359), d = n(d, a, b, c, f[e + 15], 10, 4264355552), c = n(c, d, a, b, f[e + 6], 15, 2734768916), b = n(b, c, d, a, f[e + 13], 21, 1309151649), a = n(a, b, c, d, f[e + 4], 6, 4149444226), d = n(d, a, b, c, f[e + 11], 10, 3174756917), c = n(c, d, a, b, f[e + 2], 15, 718787259), b = n(b, c, d, a, f[e + 9], 21, 3951481745), a = h(a, q), b = h(b, r), c = h(c, s), d = h(d, t);
return (p(a) + p(b) + p(c) + p(d)).toLowerCase()
};
<!DOCTYPE html>
<html>
<body onload="md5.value=MD5(a.value);">
<form oninput="md5.value=MD5(a.value)">Enter String:
<input type="string" id="a" name="a" value="https://www.zibri.org"></br></br>MD5:<output id="md5" name="md5" for="a"></output>
</form>
</body>
</html>
मुझे इस विषय पर कई लेख मिले। उन्होंने सभी को जोसेफ मेयर्स के कार्यान्वयन का सुझाव दिया।
देखें: कुछ परीक्षणों पर http://jsperf.com/md5-shootout
परम गति के लिए मेरी खोज में मैंने इस कोड को देखा, एक i ने देखा कि इसमें सुधार किया जा सकता है। इसलिए मैंने जोसेफ मेयर्स कोड के आधार पर एक नया JS स्क्रिप्ट बनाया।
देखना बेहतर Jospeh मेयर्स कोड
वर्तमान में md5 का सबसे तेज़ कार्यान्वयन (जोसेफ मायर्स कोड के आधार पर):
https://github.com/iReal/FastMD5
jsPerf तुलना: http://jsperf.com/md5-shootout/63
मुझे केवल HTML5 ब्राउज़र का समर्थन करने की आवश्यकता है जो टाइप किए गए सरणियों (DataView, ArrayBuffer, आदि) का समर्थन करते हैं। मुझे लगता है कि मैंने यूसुफ मायर्स कोड लिया और इसे Uint8Array में पास करने के लिए संशोधित किया। मैंने सभी सुधारों को नहीं पकड़ा, और अभी भी कुछ चार () सरणी कलाकृतियां हैं जिन पर सुधार किया जा सकता है। मुझे PouchDB प्रोजेक्ट में जोड़ने के लिए इसकी आवश्यकता थी।
var PouchUtils = {};
PouchUtils.Crypto = {};
(function () {
PouchUtils.Crypto.MD5 = function (uint8Array) {
function md5cycle(x, k) {
var a = x[0], b = x[1], c = x[2], d = x[3];
a = ff(a, b, c, d, k[0], 7, -680876936);
d = ff(d, a, b, c, k[1], 12, -389564586);
c = ff(c, d, a, b, k[2], 17, 606105819);
b = ff(b, c, d, a, k[3], 22, -1044525330);
a = ff(a, b, c, d, k[4], 7, -176418897);
d = ff(d, a, b, c, k[5], 12, 1200080426);
c = ff(c, d, a, b, k[6], 17, -1473231341);
b = ff(b, c, d, a, k[7], 22, -45705983);
a = ff(a, b, c, d, k[8], 7, 1770035416);
d = ff(d, a, b, c, k[9], 12, -1958414417);
c = ff(c, d, a, b, k[10], 17, -42063);
b = ff(b, c, d, a, k[11], 22, -1990404162);
a = ff(a, b, c, d, k[12], 7, 1804603682);
d = ff(d, a, b, c, k[13], 12, -40341101);
c = ff(c, d, a, b, k[14], 17, -1502002290);
b = ff(b, c, d, a, k[15], 22, 1236535329);
a = gg(a, b, c, d, k[1], 5, -165796510);
d = gg(d, a, b, c, k[6], 9, -1069501632);
c = gg(c, d, a, b, k[11], 14, 643717713);
b = gg(b, c, d, a, k[0], 20, -373897302);
a = gg(a, b, c, d, k[5], 5, -701558691);
d = gg(d, a, b, c, k[10], 9, 38016083);
c = gg(c, d, a, b, k[15], 14, -660478335);
b = gg(b, c, d, a, k[4], 20, -405537848);
a = gg(a, b, c, d, k[9], 5, 568446438);
d = gg(d, a, b, c, k[14], 9, -1019803690);
c = gg(c, d, a, b, k[3], 14, -187363961);
b = gg(b, c, d, a, k[8], 20, 1163531501);
a = gg(a, b, c, d, k[13], 5, -1444681467);
d = gg(d, a, b, c, k[2], 9, -51403784);
c = gg(c, d, a, b, k[7], 14, 1735328473);
b = gg(b, c, d, a, k[12], 20, -1926607734);
a = hh(a, b, c, d, k[5], 4, -378558);
d = hh(d, a, b, c, k[8], 11, -2022574463);
c = hh(c, d, a, b, k[11], 16, 1839030562);
b = hh(b, c, d, a, k[14], 23, -35309556);
a = hh(a, b, c, d, k[1], 4, -1530992060);
d = hh(d, a, b, c, k[4], 11, 1272893353);
c = hh(c, d, a, b, k[7], 16, -155497632);
b = hh(b, c, d, a, k[10], 23, -1094730640);
a = hh(a, b, c, d, k[13], 4, 681279174);
d = hh(d, a, b, c, k[0], 11, -358537222);
c = hh(c, d, a, b, k[3], 16, -722521979);
b = hh(b, c, d, a, k[6], 23, 76029189);
a = hh(a, b, c, d, k[9], 4, -640364487);
d = hh(d, a, b, c, k[12], 11, -421815835);
c = hh(c, d, a, b, k[15], 16, 530742520);
b = hh(b, c, d, a, k[2], 23, -995338651);
a = ii(a, b, c, d, k[0], 6, -198630844);
d = ii(d, a, b, c, k[7], 10, 1126891415);
c = ii(c, d, a, b, k[14], 15, -1416354905);
b = ii(b, c, d, a, k[5], 21, -57434055);
a = ii(a, b, c, d, k[12], 6, 1700485571);
d = ii(d, a, b, c, k[3], 10, -1894986606);
c = ii(c, d, a, b, k[10], 15, -1051523);
b = ii(b, c, d, a, k[1], 21, -2054922799);
a = ii(a, b, c, d, k[8], 6, 1873313359);
d = ii(d, a, b, c, k[15], 10, -30611744);
c = ii(c, d, a, b, k[6], 15, -1560198380);
b = ii(b, c, d, a, k[13], 21, 1309151649);
a = ii(a, b, c, d, k[4], 6, -145523070);
d = ii(d, a, b, c, k[11], 10, -1120210379);
c = ii(c, d, a, b, k[2], 15, 718787259);
b = ii(b, c, d, a, k[9], 21, -343485551);
x[0] = add32(a, x[0]);
x[1] = add32(b, x[1]);
x[2] = add32(c, x[2]);
x[3] = add32(d, x[3]);
}
function cmn(q, a, b, x, s, t) {
a = add32(add32(a, q), add32(x, t));
return add32((a << s) | (a >>> (32 - s)), b);
}
function ff(a, b, c, d, x, s, t) {
return cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function gg(a, b, c, d, x, s, t) {
return cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function hh(a, b, c, d, x, s, t) {
return cmn(b ^ c ^ d, a, b, x, s, t);
}
function ii(a, b, c, d, x, s, t) {
return cmn(c ^ (b | (~d)), a, b, x, s, t);
}
function md51(s) {
txt = '';
var n = s.length,
state = [1732584193, -271733879, -1732584194, 271733878], i;
for (i = 64; i <= s.length; i += 64) {
md5cycle(state, md5blk(s.subarray(i - 64, i)));
}
s = s.subarray(i - 64);
var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (i = 0; i < s.length; i++)
tail[i >> 2] |= s[i] << ((i % 4) << 3);
tail[i >> 2] |= 0x80 << ((i % 4) << 3);
if (i > 55) {
md5cycle(state, tail);
for (i = 0; i < 16; i++) tail[i] = 0;
}
tail[14] = n * 8;
md5cycle(state, tail);
return state;
}
/* there needs to be support for Unicode here,
* unless we pretend that we can redefine the MD-5
* algorithm for multi-byte characters (perhaps
* by adding every four 16-bit characters and
* shortening the sum to 32 bits). Otherwise
* I suggest performing MD-5 as if every character
* was two bytes--e.g., 0040 0025 = @%--but then
* how will an ordinary MD-5 sum be matched?
* There is no way to standardize text to something
* like UTF-8 before transformation; speed cost is
* utterly prohibitive. The JavaScript standard
* itself needs to look at this: it should start
* providing access to strings as preformed UTF-8
* 8-bit unsigned value arrays.
*/
function md5blk(s) { /* I figured global was faster. */
var md5blks = [], i; /* Andy King said do it this way. */
for (i = 0; i < 64; i += 4) {
md5blks[i >> 2] = s[i]
+ (s[i + 1] << 8)
+ (s[i + 2] << 16)
+ (s[i + 3] << 24);
}
return md5blks;
}
var hex_chr = '0123456789abcdef'.split('');
function rhex(n) {
var s = '', j = 0;
for (; j < 4; j++)
s += hex_chr[(n >> (j * 8 + 4)) & 0x0F]
+ hex_chr[(n >> (j * 8)) & 0x0F];
return s;
}
function hex(x) {
for (var i = 0; i < x.length; i++)
x[i] = rhex(x[i]);
return x.join('');
}
function md5(s) {
return hex(md51(s));
}
function add32(a, b) {
return (a + b) & 0xFFFFFFFF;
}
return md5(uint8Array);
};
})();
txt = ''
वास्तव में क्या मतलब है?
मैंने कई जावास्क्रिप्ट हैश कार्यान्वयनों की तुलना करने के लिए परीक्षण लिखे, जिनमें अधिकांश एमडी 5 कार्यान्वयन शामिल हैं। परीक्षणों को चलाने के लिए, http://brillout.github.io/test-javascript-hash-inforce// पर जाएं और थोड़ा इंतजार करें।
ऐसा लगता है कि आर। हिल के उत्तर का YaMD5 कार्यान्वयन सबसे तेज है।
इसने मुझे परेशान कर दिया कि मुझे एक कार्यान्वयन नहीं मिला, जो कि तेज और यूनिकोड स्ट्रिंग्स दोनों का समर्थन करता है।
इसलिए मैंने एक बनाया जो यूनिकोड स्ट्रिंग्स का समर्थन करता है और अभी भी तेजी से (लेखन के समय) शो के रूप में वर्तमान में सबसे तेज़ एससी-ओनली-स्ट्रिंग्स कार्यान्वयन की तुलना में है:
https://github.com/gorhill/yamd5.js
जोसेफ मायर्स कोड के आधार पर, लेकिन टाइपेडरेज़, प्लस अन्य सुधार का उपयोग करता है।
यह एक 42 लाइनों लंबी है, 120 वर्णों में क्षैतिज रूप से फिट होती है, और अच्छी लगती है। क्या यह जल्दी है? अच्छा - यह काफी तेज है और यह लगभग सभी अन्य जेएस कार्यान्वयनों के समान है।
मुझे बस कुछ ऐसा चाहिए था जो मेरे हेल्पर्स.जेएस फ़ाइल में बदसूरत न लगे और 20-मील लंबे मिनिफ़ाइड वन-लाइनर्स के साथ मेरे सबलाइमटेक्स्ट को धीमा न करे।
तो यहाँ मेरा पसंदीदा md5 है।
// A formatted version of a popular md5 implementation.
// Original copyright (c) Paul Johnston & Greg Holt.
// The function itself is now 42 lines long.
function md5(inputString) {
var hc="0123456789abcdef";
function rh(n) {var j,s="";for(j=0;j<=3;j++) s+=hc.charAt((n>>(j*8+4))&0x0F)+hc.charAt((n>>(j*8))&0x0F);return s;}
function ad(x,y) {var l=(x&0xFFFF)+(y&0xFFFF);var m=(x>>16)+(y>>16)+(l>>16);return (m<<16)|(l&0xFFFF);}
function rl(n,c) {return (n<<c)|(n>>>(32-c));}
function cm(q,a,b,x,s,t) {return ad(rl(ad(ad(a,q),ad(x,t)),s),b);}
function ff(a,b,c,d,x,s,t) {return cm((b&c)|((~b)&d),a,b,x,s,t);}
function gg(a,b,c,d,x,s,t) {return cm((b&d)|(c&(~d)),a,b,x,s,t);}
function hh(a,b,c,d,x,s,t) {return cm(b^c^d,a,b,x,s,t);}
function ii(a,b,c,d,x,s,t) {return cm(c^(b|(~d)),a,b,x,s,t);}
function sb(x) {
var i;var nblk=((x.length+8)>>6)+1;var blks=new Array(nblk*16);for(i=0;i<nblk*16;i++) blks[i]=0;
for(i=0;i<x.length;i++) blks[i>>2]|=x.charCodeAt(i)<<((i%4)*8);
blks[i>>2]|=0x80<<((i%4)*8);blks[nblk*16-2]=x.length*8;return blks;
}
var i,x=sb(inputString),a=1732584193,b=-271733879,c=-1732584194,d=271733878,olda,oldb,oldc,oldd;
for(i=0;i<x.length;i+=16) {olda=a;oldb=b;oldc=c;oldd=d;
a=ff(a,b,c,d,x[i+ 0], 7, -680876936);d=ff(d,a,b,c,x[i+ 1],12, -389564586);c=ff(c,d,a,b,x[i+ 2],17, 606105819);
b=ff(b,c,d,a,x[i+ 3],22,-1044525330);a=ff(a,b,c,d,x[i+ 4], 7, -176418897);d=ff(d,a,b,c,x[i+ 5],12, 1200080426);
c=ff(c,d,a,b,x[i+ 6],17,-1473231341);b=ff(b,c,d,a,x[i+ 7],22, -45705983);a=ff(a,b,c,d,x[i+ 8], 7, 1770035416);
d=ff(d,a,b,c,x[i+ 9],12,-1958414417);c=ff(c,d,a,b,x[i+10],17, -42063);b=ff(b,c,d,a,x[i+11],22,-1990404162);
a=ff(a,b,c,d,x[i+12], 7, 1804603682);d=ff(d,a,b,c,x[i+13],12, -40341101);c=ff(c,d,a,b,x[i+14],17,-1502002290);
b=ff(b,c,d,a,x[i+15],22, 1236535329);a=gg(a,b,c,d,x[i+ 1], 5, -165796510);d=gg(d,a,b,c,x[i+ 6], 9,-1069501632);
c=gg(c,d,a,b,x[i+11],14, 643717713);b=gg(b,c,d,a,x[i+ 0],20, -373897302);a=gg(a,b,c,d,x[i+ 5], 5, -701558691);
d=gg(d,a,b,c,x[i+10], 9, 38016083);c=gg(c,d,a,b,x[i+15],14, -660478335);b=gg(b,c,d,a,x[i+ 4],20, -405537848);
a=gg(a,b,c,d,x[i+ 9], 5, 568446438);d=gg(d,a,b,c,x[i+14], 9,-1019803690);c=gg(c,d,a,b,x[i+ 3],14, -187363961);
b=gg(b,c,d,a,x[i+ 8],20, 1163531501);a=gg(a,b,c,d,x[i+13], 5,-1444681467);d=gg(d,a,b,c,x[i+ 2], 9, -51403784);
c=gg(c,d,a,b,x[i+ 7],14, 1735328473);b=gg(b,c,d,a,x[i+12],20,-1926607734);a=hh(a,b,c,d,x[i+ 5], 4, -378558);
d=hh(d,a,b,c,x[i+ 8],11,-2022574463);c=hh(c,d,a,b,x[i+11],16, 1839030562);b=hh(b,c,d,a,x[i+14],23, -35309556);
a=hh(a,b,c,d,x[i+ 1], 4,-1530992060);d=hh(d,a,b,c,x[i+ 4],11, 1272893353);c=hh(c,d,a,b,x[i+ 7],16, -155497632);
b=hh(b,c,d,a,x[i+10],23,-1094730640);a=hh(a,b,c,d,x[i+13], 4, 681279174);d=hh(d,a,b,c,x[i+ 0],11, -358537222);
c=hh(c,d,a,b,x[i+ 3],16, -722521979);b=hh(b,c,d,a,x[i+ 6],23, 76029189);a=hh(a,b,c,d,x[i+ 9], 4, -640364487);
d=hh(d,a,b,c,x[i+12],11, -421815835);c=hh(c,d,a,b,x[i+15],16, 530742520);b=hh(b,c,d,a,x[i+ 2],23, -995338651);
a=ii(a,b,c,d,x[i+ 0], 6, -198630844);d=ii(d,a,b,c,x[i+ 7],10, 1126891415);c=ii(c,d,a,b,x[i+14],15,-1416354905);
b=ii(b,c,d,a,x[i+ 5],21, -57434055);a=ii(a,b,c,d,x[i+12], 6, 1700485571);d=ii(d,a,b,c,x[i+ 3],10,-1894986606);
c=ii(c,d,a,b,x[i+10],15, -1051523);b=ii(b,c,d,a,x[i+ 1],21,-2054922799);a=ii(a,b,c,d,x[i+ 8], 6, 1873313359);
d=ii(d,a,b,c,x[i+15],10, -30611744);c=ii(c,d,a,b,x[i+ 6],15,-1560198380);b=ii(b,c,d,a,x[i+13],21, 1309151649);
a=ii(a,b,c,d,x[i+ 4], 6, -145523070);d=ii(d,a,b,c,x[i+11],10,-1120210379);c=ii(c,d,a,b,x[i+ 2],15, 718787259);
b=ii(b,c,d,a,x[i+ 9],21, -343485551);a=ad(a,olda);b=ad(b,oldb);c=ad(c,oldc);d=ad(d,oldd);
}
return rh(a)+rh(b)+rh(c)+rh(d);
}
लेकिन वास्तव में, मैंने इसे केवल सौंदर्यवादी विचारों से बाहर रखा है। इसके अलावा, टिप्पणियों के साथ यह बिल्कुल 4000 बाइट्स है। कृपया पूछें क्यों नहीं। मैं अपने ओसीडी / विद्रोही व्यवहार के लिए उचित स्पष्टीकरण नहीं दे सकता। इसके अलावा, पॉल जॉनसन को धन्यवाद, ग्रेग होल्ट को धन्यवाद। (साइड नोट: आप लोग कुछ var कीवर्ड छोड़ चुके हैं, इसलिए मैंने उन्हें जोड़ने की स्वतंत्रता ले ली है।)
const crypto = require('crypto')
crypto.createHash('md5').update('hello world').digest('hex')
कोड स्निपेट ऊपर स्ट्रिंग के लिए एमडी 5 हेक्स स्ट्रिंग की गणना करता है hello world
इस समाधान का लाभ यह है कि आपको अतिरिक्त पुस्तकालय स्थापित करने की आवश्यकता नहीं है।
मुझे लगता है कि समाधान में निर्मित सबसे तेज होना चाहिए। यदि नहीं, तो हमें Node.js प्रोजेक्ट के लिए समस्या / PR बनाना चाहिए।
शायद यह पैकेज उपयोगी था
https://www.npmjs.com/package/pure-md5
console.time('latin');
const latin = md5('hello');
console.timeEnd('latin');
console.log('Привет: ', md5('Привет'));
console.log('嘿: ', md5('嘿'));
<script src="https://unpkg.com/pure-md5@latest/lib/index.js"></script>
Http://phpjs.org/functions/md5/ क्यों न करें ?
दुर्भाग्य से प्रदर्शन किसी भी अनुकरणीय स्क्रिप्ट के साथ सीमित है, हालांकि यह वास्तविक md5 हैश को प्रस्तुत कर सकता है। यद्यपि मैं पासवर्ड के लिए md5 का उपयोग करने के खिलाफ सलाह दूंगा, क्योंकि यह एक तेजी से प्रदान की जाने वाली हैश है।
ग्राफिक कार्ड (वेबलॉग में हैशिंग एल्गोरिथ्म को लागू करना) पर गणना करके बहुत तेज़ हैशिंग संभव हो सकता है, जैसा कि SHA256 के बारे में चर्चा की गई: क्या उपयोगकर्ता के वीडियो कार्ड का उपयोग करके ब्राउज़र में sha256 हैश की गणना करना संभव है, जैसे। WebGL या फ़्लैश का उपयोग करके?
आप मेरे md5 कार्यान्वयन की जांच भी कर सकते हैं । यह लगभग होना चाहिए। जैसा कि ऊपर पोस्ट किया गया है। दुर्भाग्य से, प्रदर्शन आंतरिक लूप द्वारा सीमित है जो अधिक अनुकूलन करना असंभव है।
यदि आपके आवेदन का प्रदर्शन एमडी 5 के जावास्क्रिप्ट कार्यान्वयन द्वारा सीमित है, तो आप वास्तव में कुछ गलत कर रहे हैं। एक वास्तु परिवर्तन पर विचार करें (संकेत: एमडी 5 का उपयोग अक्सर कम करें)