{"id":31893,"date":"2024-11-25T13:50:39","date_gmt":"2024-11-25T05:50:39","guid":{"rendered":"https:\/\/fwq.ai\/blog\/31893\/"},"modified":"2024-11-25T13:50:39","modified_gmt":"2024-11-25T05:50:39","slug":"%e5%85%b3%e4%ba%8e%e5%be%ae%e4%bf%a1%e5%b0%8f%e7%a8%8b%e5%ba%8fmd5%e7%9a%84%e6%96%b9%e6%b3%95%e7%9a%84%e8%a7%a3%e6%9e%90","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/31893\/","title":{"rendered":"\u5173\u4e8e\u5fae\u4fe1\u5c0f\u7a0b\u5e8fMD5\u7684\u65b9\u6cd5\u7684\u89e3\u6790"},"content":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4ecb\u7ecd\u4e86\u5fae\u4fe1\u5c0f\u7a0b\u5e8f md5\u7684\u65b9\u6cd5\u8be6\u89e3\u53ca\u5b9e\u4f8b\u4ee3\u7801\u7684\u76f8\u5173\u8d44\u6599,\u9700\u8981\u7684\u670b\u53cb\u53ef\u4ee5\u53c2\u8003\u4e0b<\/p>\n<p><strong>\u5fae\u4fe1\u5c0f\u7a0b\u5e8f MD5\u7684\u65b9\u6cd5\u8be6\u89e3<\/strong><\/p>\n<p>\u751f\u6210\u7684\u6587\u4ef6\u53ef\u4ee5\u653e\u5728&nbsp; utils\u6587\u4ef6\u4e2d\u54e6\uff01\uff01\uff01<\/p>\n<\/p>\n<pre>\/*&nbsp;\n&nbsp;*&nbsp;A&nbsp;JavaScript&nbsp;implementation&nbsp;of&nbsp;the&nbsp;RSA&nbsp;Data&nbsp;Security,&nbsp;Inc.&nbsp;MD5&nbsp;Message&nbsp;\n&nbsp;*&nbsp;Digest&nbsp;Algorithm,&nbsp;as&nbsp;defined&nbsp;in&nbsp;RFC&nbsp;1321.&nbsp;\n&nbsp;*&nbsp;Version&nbsp;1.1&nbsp;Copyright&nbsp;(C)&nbsp;Paul&nbsp;Johnston&nbsp;1999&nbsp;-&nbsp;2002.&nbsp;\n&nbsp;*&nbsp;Code&nbsp;also&nbsp;contributed&nbsp;by&nbsp;Greg&nbsp;Holt&nbsp;\n&nbsp;*&nbsp;See&nbsp;http:\/\/pajhome.org.uk\/site\/legal.html&nbsp;for&nbsp;details.&nbsp;\n&nbsp;*\/&nbsp;&nbsp;\n&nbsp;&nbsp;\n\/*&nbsp;\n&nbsp;*&nbsp;Add&nbsp;integers,&nbsp;wrapping&nbsp;at&nbsp;2^32.&nbsp;This&nbsp;uses&nbsp;16-bit&nbsp;operations&nbsp;internally&nbsp;\n&nbsp;*&nbsp;to&nbsp;work&nbsp;around&nbsp;bugs&nbsp;in&nbsp;some&nbsp;JS&nbsp;interpreters.&nbsp;\n&nbsp;*\/&nbsp;&nbsp;\nfunction&nbsp;safe_add(x,&nbsp;y)&nbsp;&nbsp;\n{&nbsp;&nbsp;\n&nbsp;var&nbsp;lsw&nbsp;=&nbsp;(x&nbsp;&amp;amp;&nbsp;0xFFFF)&nbsp;+&nbsp;(y&nbsp;&amp;amp;&nbsp;0xFFFF)&nbsp;&nbsp;\n&nbsp;var&nbsp;msw&nbsp;=&nbsp;(x&nbsp;&amp;gt;&amp;gt;&nbsp;16)&nbsp;+&nbsp;(y&nbsp;&amp;gt;&amp;gt;&nbsp;16)&nbsp;+&nbsp;(lsw&nbsp;&amp;gt;&amp;gt;&nbsp;16)&nbsp;&nbsp;\n&nbsp;return&nbsp;(msw&nbsp;&amp;gt;&amp;gt;&nbsp;(32&nbsp;-&nbsp;cnt))&nbsp;&nbsp;\n}&nbsp;&nbsp;\n&nbsp;&nbsp;\n\/*&nbsp;\n&nbsp;*&nbsp;These&nbsp;functions&nbsp;implement&nbsp;the&nbsp;four&nbsp;basic&nbsp;operations&nbsp;the&nbsp;algorithm&nbsp;uses.&nbsp;\n&nbsp;*\/&nbsp;&nbsp;\nfunction&nbsp;cmn(q,&nbsp;a,&nbsp;b,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp;\n{&nbsp;&nbsp;\n&nbsp;return&nbsp;safe_add(rol(safe_add(safe_add(a,&nbsp;q),&nbsp;safe_add(x,&nbsp;t)),&nbsp;s),&nbsp;b)&nbsp;&nbsp;\n}&nbsp;&nbsp;\nfunction&nbsp;ff(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp;\n{&nbsp;&nbsp;\n&nbsp;return&nbsp;cmn((b&nbsp;&amp;amp;&nbsp;c)&nbsp;|&nbsp;((~b)&nbsp;&amp;amp;&nbsp;d),&nbsp;a,&nbsp;b,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp;\n}&nbsp;&nbsp;\nfunction&nbsp;gg(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp;\n{&nbsp;&nbsp;\n&nbsp;return&nbsp;cmn((b&nbsp;&amp;amp;&nbsp;d)&nbsp;|&nbsp;(c&nbsp;&amp;amp;&nbsp;(~d)),&nbsp;a,&nbsp;b,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp;\n}&nbsp;&nbsp;\nfunction&nbsp;hh(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp;\n{&nbsp;&nbsp;\n&nbsp;return&nbsp;cmn(b&nbsp;^&nbsp;c&nbsp;^&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp;\n}&nbsp;&nbsp;\nfunction&nbsp;ii(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp;\n{&nbsp;&nbsp;\n&nbsp;return&nbsp;cmn(c&nbsp;^&nbsp;(b&nbsp;|&nbsp;(~d)),&nbsp;a,&nbsp;b,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp;\n}&nbsp;&nbsp;\n&nbsp;&nbsp;\n\/*&nbsp;\n&nbsp;*&nbsp;Calculate&nbsp;the&nbsp;MD5&nbsp;of&nbsp;an&nbsp;array&nbsp;of&nbsp;little-endian&nbsp;words,&nbsp;producing&nbsp;an&nbsp;array&nbsp;\n&nbsp;*&nbsp;of&nbsp;little-endian&nbsp;words.&nbsp;\n&nbsp;*\/&nbsp;&nbsp;\nfunction&nbsp;coreMD5(x)&nbsp;&nbsp;\n{&nbsp;&nbsp;\n&nbsp;var&nbsp;a&nbsp;=&nbsp;1732584193&nbsp;&nbsp;\n&nbsp;var&nbsp;b&nbsp;=&nbsp;-271733879&nbsp;&nbsp;\n&nbsp;var&nbsp;c&nbsp;=&nbsp;-1732584194&nbsp;&nbsp;\n&nbsp;var&nbsp;d&nbsp;=&nbsp;271733878&nbsp;&nbsp;\n&nbsp;&nbsp;\n&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;gt;2]&nbsp;&amp;gt;&amp;gt;&nbsp;((i%4)*8+4))&nbsp;&amp;amp;&nbsp;0xF)&nbsp;+&nbsp;&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hex_tab.charAt((binarray[i&amp;gt;&amp;gt;2]&nbsp;&amp;gt;&amp;gt;&nbsp;((i%4)*8))&nbsp;&amp;amp;&nbsp;0xF)&nbsp;&nbsp;\n&nbsp;}&nbsp;&nbsp;\n&nbsp;return&nbsp;str&nbsp;&nbsp;\n}&nbsp;&nbsp;\n&nbsp;&nbsp;\n\/*&nbsp;\n&nbsp;*&nbsp;Convert&nbsp;an&nbsp;array&nbsp;of&nbsp;little-endian&nbsp;words&nbsp;to&nbsp;a&nbsp;base64&nbsp;encoded&nbsp;string.&nbsp;\n&nbsp;*\/&nbsp;&nbsp;\nfunction&nbsp;binl2b64(binarray)&nbsp;&nbsp;\n{&nbsp;&nbsp;\n&nbsp;var&nbsp;tab&nbsp;=&nbsp;\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/\"&nbsp;&nbsp;\n&nbsp;var&nbsp;str&nbsp;=&nbsp;\"\"&nbsp;&nbsp;\n&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;gt;5]&nbsp;&amp;gt;5+1]&nbsp;&amp;gt;&amp;gt;&nbsp;(32-i%32))&nbsp;&amp;amp;&nbsp;0x3F))&nbsp;&nbsp;\n&nbsp;}&nbsp;&nbsp;\n&nbsp;return&nbsp;str&nbsp;&nbsp;\n}&nbsp;&nbsp;\n&nbsp;&nbsp;\n\/*&nbsp;\n&nbsp;*&nbsp;Convert&nbsp;an&nbsp;8-bit&nbsp;character&nbsp;string&nbsp;to&nbsp;a&nbsp;sequence&nbsp;of&nbsp;16-word&nbsp;blocks,&nbsp;stored&nbsp;\n&nbsp;*&nbsp;as&nbsp;an&nbsp;array,&nbsp;and&nbsp;append&nbsp;appropriate&nbsp;padding&nbsp;for&nbsp;MD4\/5&nbsp;calculation.&nbsp;\n&nbsp;*&nbsp;If&nbsp;any&nbsp;of&nbsp;the&nbsp;characters&nbsp;are&nbsp;&amp;gt;255,&nbsp;the&nbsp;high&nbsp;byte&nbsp;is&nbsp;silently&nbsp;ignored.&nbsp;\n&nbsp;*\/&nbsp;&nbsp;\nfunction&nbsp;str2binl(str)&nbsp;&nbsp;\n{&nbsp;&nbsp;\n&nbsp;var&nbsp;nblk&nbsp;=&nbsp;((str.length&nbsp;+&nbsp;8)&nbsp;&amp;gt;&amp;gt;&nbsp;6)&nbsp;+&nbsp;1&nbsp;\/\/&nbsp;number&nbsp;of&nbsp;16-word&nbsp;blocks&nbsp;&nbsp;\n&nbsp;var&nbsp;blks&nbsp;=&nbsp;new&nbsp;Array(nblk&nbsp;*&nbsp;16)&nbsp;&nbsp;\n&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;gt;2]&nbsp;|=&nbsp;(str.charCodeAt(i)&nbsp;&amp;amp;&nbsp;0xFF)&nbsp;&amp;gt;2]&nbsp;|=&nbsp;0x80&nbsp;&amp;gt;&nbsp;5)&nbsp;+&nbsp;1&nbsp;\/\/&nbsp;number&nbsp;of&nbsp;16-word&nbsp;blocks&nbsp;&nbsp;\n&nbsp;var&nbsp;blks&nbsp;=&nbsp;new&nbsp;Array(nblk&nbsp;*&nbsp;16)&nbsp;&nbsp;\n&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;gt;1]&nbsp;|=&nbsp;str.charCodeAt(i)&nbsp;&amp;gt;1]&nbsp;|=&nbsp;0x80&nbsp;&lt;p&gt;&lt;\/p&gt;&lt;p&gt;\u4f7f\u7528\u65b9\u5f0f \uff1a&lt;br&gt;&lt;\/p&gt;&lt;p class=\"jb51code\"&gt;&lt;\/p&gt;&lt;pre class=\"brush:js;toolbar:false;\"&gt;var&nbsp;utilMd5&nbsp;=&nbsp;require('..\/..\/utils\/md5.js');&nbsp;&nbsp;\nvar&nbsp;password&nbsp;=&nbsp;utilMd5.hexMD5(password);<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u672c\u6587\u7684\u5168\u90e8\u5185\u5bb9\uff0c\u5e0c\u671b\u5bf9\u5927\u5bb6\u7684\u5b66\u4e60\u6709\u6240\u5e2e\u52a9\uff0c\u66f4\u591a\u76f8\u5173\u5185\u5bb9\u8bf7\u5173\u6ce8PHP\u4e2d\u6587\u7f51\uff01<\/p>\n<p>\u76f8\u5173\u63a8\u8350\uff1a<\/p>\n<p><\/p>\n<p><\/p>\n<\/p>\n<p><span><\/span><\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u5173\u4e8e\u5fae\u4fe1\u5c0f\u7a0b\u5e8fMD5\u7684\u65b9\u6cd5\u7684\u89e3\u6790\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4ecb\u7ecd\u4e86\u5fae\u4fe1\u5c0f\u7a0b\u5e8f md5\u7684\u65b9\u6cd5\u8be6\u89e3\u53ca\u5b9e\u4f8b\u4ee3\u7801\u7684\u76f8\u5173\u8d44\u6599,\u9700\u8981\u7684\u670b\u53cb\u53ef\u4ee5\u53c2\u8003\u4e0b \u5fae\u4fe1\u5c0f\u7a0b\u5e8f MD5\u7684\u65b9\u6cd5\u8be6\u89e3 \u751f\u6210\u7684\u6587\u4ef6\u53ef\u4ee5\u653e\u5728&nbsp; utils\u6587\u4ef6\u4e2d\u54e6\uff01\uff01\uff01 \/*&nbsp; &nbsp;*&nbsp;A&nbsp;JavaScript&nbsp;implementation&nbsp;of&nbsp;the&nbsp;RSA&nbsp;Data&nbsp;Security,&nbsp;Inc.&nbsp;MD5&nbsp;Message&nbsp; &nbsp;*&nbsp;Digest&nbsp;Algorithm,&nbsp;as&nbsp;defined&nbsp;in&nbsp;RFC&nbsp;1321.&nbsp; &nbsp;*&nbsp;Version&nbsp;1.1&nbsp;Copyright&nbsp;(C)&nbsp;Paul&nbsp;Johnston&nbsp;1999&nbsp;&#8211;&nbsp;2002.&nbsp; &nbsp;*&nbsp;Code&nbsp;also&nbsp;contributed&nbsp;by&nbsp;Greg&nbsp;Holt&nbsp; &nbsp;*&nbsp;See&nbsp;http:\/\/pajhome.org.uk\/site\/legal.html&nbsp;for&nbsp;details.&nbsp; &nbsp;*\/&nbsp;&nbsp; &nbsp;&nbsp; \/*&nbsp; &nbsp;*&nbsp;Add&nbsp;integers,&nbsp;wrapping&nbsp;at&nbsp;2^32.&nbsp;This&nbsp;uses&nbsp;16-bit&nbsp;operations&nbsp;internally&nbsp; &nbsp;*&nbsp;to&nbsp;work&nbsp;around&nbsp;bugs&nbsp;in&nbsp;some&nbsp;JS&nbsp;interpreters.&nbsp; &nbsp;*\/&nbsp;&nbsp; function&nbsp;safe_add(x,&nbsp;y)&nbsp;&nbsp; {&nbsp;&nbsp; &nbsp;var&nbsp;lsw&nbsp;=&nbsp;(x&nbsp;&amp;amp;&nbsp;0xFFFF)&nbsp;+&nbsp;(y&nbsp;&amp;amp;&nbsp;0xFFFF)&nbsp;&nbsp; &nbsp;var&nbsp;msw&nbsp;=&nbsp;(x&nbsp;&amp;gt;&amp;gt;&nbsp;16)&nbsp;+&nbsp;(y&nbsp;&amp;gt;&amp;gt;&nbsp;16)&nbsp;+&nbsp;(lsw&nbsp;&amp;gt;&amp;gt;&nbsp;16)&nbsp;&nbsp; &nbsp;return&nbsp;(msw&nbsp;&amp;gt;&amp;gt;&nbsp;(32&nbsp;&#8211;&nbsp;cnt))&nbsp;&nbsp; }&nbsp;&nbsp; &nbsp;&nbsp; \/*&nbsp; &nbsp;*&nbsp;These&nbsp;functions&nbsp;implement&nbsp;the&nbsp;four&nbsp;basic&nbsp;operations&nbsp;the&nbsp;algorithm&nbsp;uses.&nbsp; &nbsp;*\/&nbsp;&nbsp; function&nbsp;cmn(q,&nbsp;a,&nbsp;b,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp; {&nbsp;&nbsp; &nbsp;return&nbsp;safe_add(rol(safe_add(safe_add(a,&nbsp;q),&nbsp;safe_add(x,&nbsp;t)),&nbsp;s),&nbsp;b)&nbsp;&nbsp; }&nbsp;&nbsp; function&nbsp;ff(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp; {&nbsp;&nbsp; &nbsp;return&nbsp;cmn((b&nbsp;&amp;amp;&nbsp;c)&nbsp;|&nbsp;((~b)&nbsp;&amp;amp;&nbsp;d),&nbsp;a,&nbsp;b,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp; }&nbsp;&nbsp; function&nbsp;gg(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp; {&nbsp;&nbsp; &nbsp;return&nbsp;cmn((b&nbsp;&amp;amp;&nbsp;d)&nbsp;|&nbsp;(c&nbsp;&amp;amp;&nbsp;(~d)),&nbsp;a,&nbsp;b,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp; }&nbsp;&nbsp; function&nbsp;hh(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp; {&nbsp;&nbsp; &nbsp;return&nbsp;cmn(b&nbsp;^&nbsp;c&nbsp;^&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp; }&nbsp;&nbsp; function&nbsp;ii(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp; {&nbsp;&nbsp; &nbsp;return&nbsp;cmn(c&nbsp;^&nbsp;(b&nbsp;|&nbsp;(~d)),&nbsp;a,&nbsp;b,&nbsp;x,&nbsp;s,&nbsp;t)&nbsp;&nbsp; }&nbsp;&nbsp; &nbsp;&nbsp; \/*&nbsp; &nbsp;*&nbsp;Calculate&nbsp;the&nbsp;MD5&nbsp;of&nbsp;an&nbsp;array&nbsp;of&nbsp;little-endian&nbsp;words,&nbsp;producing&nbsp;an&nbsp;array&nbsp; &nbsp;*&nbsp;of&nbsp;little-endian&nbsp;words.&nbsp; &nbsp;*\/&nbsp;&nbsp; function&nbsp;coreMD5(x)&nbsp;&nbsp; {&nbsp;&nbsp; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-31893","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/31893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=31893"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/31893\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=31893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=31893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=31893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}