অনেক MD5 জাভাস্ক্রিপ্ট বাস্তবায়ন আছে। কেউ কি জানে যে কোনটি সবচেয়ে উন্নত, সবচেয়ে বাগফিক্সড এবং দ্রুত?
এই সরঞ্জামটির জন্য আমার এটি দরকার ।
অনেক MD5 জাভাস্ক্রিপ্ট বাস্তবায়ন আছে। কেউ কি জানে যে কোনটি সবচেয়ে উন্নত, সবচেয়ে বাগফিক্সড এবং দ্রুত?
এই সরঞ্জামটির জন্য আমার এটি দরকার ।
উত্তর:
আমি শুনেছি জোসেফের মাইয়ার্স বাস্তবায়ন বেশ দ্রুত। অতিরিক্তভাবে, জাভাস্ক্রিপ্ট অপ্টিমাইজেশনে তাঁর একটি দীর্ঘ নিবন্ধ রয়েছে যা তার বাস্তবায়ন লেখার সময় তিনি কী শিখেছিলেন তা বর্ণনা করে। পারফরম্যান্ট জাভাস্ক্রিপ্টে আগ্রহী প্রত্যেকের জন্য এটি ভাল পড়া।
var add32
185 লাইনটি ঠিক হওয়া উচিত add32
তাই আমি খুঁজে পেলাম সেরা কাঁটাচামড়াটি এবং এই নতুন সংস্করণে এটি আপডেট করেছি: gist.github.com/MichaelPote/3f0cefaaa9578d7e30be
আমি আপনাকে এই ক্ষেত্রে ক্রিপ্টোজেএস ব্যবহার করার পরামর্শ দেব।
মূলত ক্রিপ্টোজেএস সেরা অনুশীলন এবং নিদর্শন ব্যবহার করে জাভাস্ক্রিপ্টে প্রয়োগ করা স্ট্যান্ডার্ড এবং সুরক্ষিত ক্রিপ্টোগ্রাফিক অ্যালগরিদমের একটি ক্রমবর্ধমান সংগ্রহ। তারা দ্রুত, এবং তাদের একটি সামঞ্জস্যপূর্ণ এবং সহজ ইন্টারফেস রয়েছে।
সুতরাং আপনি যদি নিজের পাসওয়ার্ডের স্ট্রিংয়ের MD5 হ্যাশ গণনা করতে চান তবে নীচে হিসাবে করুন:
<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>
সুতরাং এই স্ক্রিপ্টটি আপনার পাসওয়ার্ডের স্ট্রিংয়ের হ্যাশ সার্ভারে পোস্ট করবে।
অন্যান্য তথ্যের জন্য এবং অন্যান্য হ্যাশ গণনা করা অ্যালগরিদমগুলিতে সমর্থন আপনি দেখতে পারেন:
লাইব্রেরি নির্বাচন করার সময় এটি দেখতেও গুরুত্বপূর্ণ যে এটি আধুনিক ফ্রেমওয়ার্ক যেমন বোভার, জেসলিন্ট পাস করে, সক্রিয় বিকাশে থাকার সাথে সাথে এএমডি / রিকোয়ারডেজেএস এর মতো জেউকিরির মডিউল সিস্টেম বা মডিউল সিস্টেমগুলিকে সমর্থন করে এবং 1 টিরও বেশি অবদানকারী রয়েছে কিনা তা দেখার দরকার। কয়েকটি বিকল্প রয়েছে যা কিছু বা এই সমস্ত অতিরিক্ত মানদণ্ডকে সন্তুষ্ট করে:
ক্রিপ্টোজেএস থেকে উদাহরণ:
//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 আপনার সেরা বাজি (এবং এটি সাধারণ জেএমএম কোড)। তবে আপনি যদি আরও বিস্তৃত লাইব্রেরি খুঁজছেন তবে ক্রিপ্টোজেএস আপনার সেরা বেট যদিও এটি স্পার্ক এমডি 5 এর চেয়ে 79% ধীর। তবে আমি কল্পনা করব ক্রিপ্টোজেএস শেষ পর্যন্ত একই গতি অর্জন করবে যেমন এটি কিছুটা সক্রিয় প্রকল্প।
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-Soutout কিছু পরীক্ষা করুন
চূড়ান্ত গতির জন্য আমার সন্ধানে আমি এই কোডটি দেখলাম, আমি দেখেছি এটি আরও উন্নত হতে পারে। সুতরাং আমি জোসেফ মেয়ার্স কোডের উপর ভিত্তি করে একটি নতুন জেএস স্ক্রিপ্ট তৈরি করেছি।
বর্তমানে এমডি 5 -র দ্রুত প্রয়োগকরণ (জোসেফ মাইয়ার্সের কোডের ভিত্তিতে):
https://github.com/iReal/FastMD5
jsLive তুলনা: http://jsperf.com/md5-shoutout/63
আমাকে কেবল এইচটিএমএল 5 ব্রাউজারগুলি সমর্থন করতে হবে যা টাইপ করা অ্যারেগুলিকে সমর্থন করে (ডেটাভিউ, অ্যারেবফার, ইত্যাদি) আমার মনে হয় আমি জোসেফ মাইয়ার্স কোডটি নিয়েছি এবং এটি কোনও ইউন্ট 8 অ্যারে পাসিং সমর্থন করার জন্য এটি সংশোধন করেছি। আমি সমস্ত উন্নতিটি ধরতে পারি নি এবং সম্ভবত এখনও কিছু চর () অ্যারে শৈলী রয়েছে যা উন্নত করা যেতে পারে। পাউচডিবি প্রকল্পে যুক্ত করার জন্য আমার এটি দরকার ছিল।
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-implementations/ এ যান এবং কিছুটা অপেক্ষা করুন।
দেখে মনে হচ্ছে যে আর। হিলের উত্তরটির YaMD5 বাস্তবায়ন সবচেয়ে দ্রুত।
এটি আমাকে বিরক্ত করেছিল যে আমি এমন একটি বাস্তবায়ন পাইনি যা দ্রুত এবং ইউনিকোড স্ট্রিং উভয় সমর্থন করে।
সুতরাং আমি এমন একটি তৈরি করেছি যা ইউনিকোড স্ট্রিংগুলিকে সমর্থন করে এবং বর্তমানে দ্রুততম এসকিআই-স্ট্রিং বাস্তবায়নগুলির চেয়ে দ্রুত (লেখার সময়) দেখায় :
https://github.com/gorhill/yamd5.js
জোসেফ মাইয়ার্স কোডের উপর ভিত্তি করে, তবে টাইপড অ্যারেগুলি, এবং অন্যান্য উন্নতি ব্যবহার করে।
এটি একটি 42 লাইন দীর্ঘ, 120 অক্ষরে অনুভূমিকভাবে ফিট করে এবং দেখতে দুর্দান্ত looks এটা কি দ্রুত? ভাল - এটি যথেষ্ট দ্রুত এবং এটি অন্যান্য জেএস বাস্তবায়নের মতো প্রায় একই।
আমি কেবল এমন কিছু চেয়েছিলাম যা আমার হেল্পার্স.জেএস ফাইলগুলিতে কুশ্রী লাগে না এবং 20 মাইল দীর্ঘ মিনিডযুক্ত ওয়ান-লাইনারগুলির সাথে আমার সাব্লাইমেক্সটকে ধীর করে না।
সুতরাং এখানে আমার প্রিয় এমডি 5।
// 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 বাইট। কেন জিজ্ঞাসা করবেন না। আমি আমার ওসিডি / বিদ্রোহী আচরণের জন্য সঠিক ব্যাখ্যা দিয়ে আসতে পারি না। এছাড়াও, আপনাকে পল জনস্টন, গ্রেগ হোল্টকে ধন্যবাদ জানাই। (পার্শ্ব দ্রষ্টব্য: আপনি ছেলেরা কয়েকটি ভেরিওয়ার্ড কীওয়ার্ড বাদ দিয়েছিলেন তাই আমি সেগুলি যুক্ত করার স্বাধীনতা নিয়েছি))
const crypto = require('crypto')
crypto.createHash('md5').update('hello world').digest('hex')
উপরের কোড স্নিপেট স্ট্রিংয়ের জন্য এমডি 5 হেক্স স্ট্রিং গণনা করে hello world
এই সমাধানটির সুবিধাটি হ'ল আপনার অতিরিক্ত লাইব্রেরি ইনস্টল করার দরকার নেই।
আমি মনে করি সমাধানে তৈরিটি দ্রুত হওয়া উচিত। যদি তা না হয় তবে আমাদের নোড.জেএস প্রকল্পের জন্য ইস্যু / পিআর তৈরি করা উচিত।
হতে পারে এই প্যাকেজটি 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/function/md5/ কেন চেষ্টা করবেন না ?
দুর্ভাগ্যক্রমে পারফরম্যান্স কোনও ইমুলেটেড স্ক্রিপ্টের সাথে সীমাবদ্ধ, তবে এটি বাস্তব এমডি 5 হ্যাশ সরবরাহ করতে পারে। যদিও আমি পাসওয়ার্ডগুলির জন্য এমডি 5 ব্যবহারের বিরুদ্ধে পরামর্শ দেব, কারণ এটি একটি দ্রুত-রেন্ডার হ্যাশ।
গ্রাফিক কার্ডে গণনা করে অনেক দ্রুত হ্যাশিং করা সম্ভব (ওয়েবজিএলে হ্যাশিং অ্যালগরিদম প্রয়োগ করুন), সেখানে SHA256 সম্পর্কে আলোচনা করা হয়েছে: ব্যবহারকারীর ভিডিও কার্ড ব্যবহার করে ব্রাউজারে sha256 হ্যাশগুলি গণনা করা কি সম্ভব? ওয়েবজিএল বা ফ্ল্যাশ ব্যবহার করে?
আপনি আমার এমডি 5 বাস্তবায়নও পরীক্ষা করতে পারেন । এটি প্রায় হতে হবে। উপরে পোস্ট করা অন্যান্য হিসাবে একই। দুর্ভাগ্যক্রমে, পারফরম্যান্সটি অভ্যন্তরীণ লুপ দ্বারা সীমাবদ্ধ যা আরও অনুকূলিতকরণ অসম্ভব।
আপনার অ্যাপ্লিকেশনটির কার্যকারিতা যদি এমড 5 এর জাভাস্ক্রিপ্ট প্রয়োগের মাধ্যমে সীমাবদ্ধ থাকে তবে আপনি সত্যিই কিছু ভুল করছেন। একটি স্থাপত্য পরিবর্তন বিবেচনা করুন (ইঙ্গিত: MD5 কম প্রায়ই ব্যবহার করুন)