<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_DHTML%2FSecurity%2FMD4</id>
		<title>JavaScript DHTML/Security/MD4 - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_DHTML%2FSecurity%2FMD4"/>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Security/MD4&amp;action=history"/>
		<updated>2026-04-04T15:33:59Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_DHTML/Security/MD4&amp;diff=3672&amp;oldid=prev</id>
		<title> в 09:59, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Security/MD4&amp;diff=3672&amp;oldid=prev"/>
				<updated>2010-05-26T09:59:55Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 09:59, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_DHTML/Security/MD4&amp;diff=3673&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Security/MD4&amp;diff=3673&amp;oldid=prev"/>
				<updated>2010-05-26T07:27:12Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==MD4 Hashing in JavaScript==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;!--&lt;br /&gt;
      CryptoMX Tools&lt;br /&gt;
      Copyright (C) 2004 - 2006 Derek Buitenhuis&lt;br /&gt;
      This program is free software; you can redistribute it and/or&lt;br /&gt;
      modify it under the terms of the GNU General Public License&lt;br /&gt;
      as published by the Free Software Foundation; either version 2&lt;br /&gt;
      of the License, or (at your option) any later version.&lt;br /&gt;
      This program is distributed in the hope that it will be useful,&lt;br /&gt;
      but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
      GNU General Public License for more details.&lt;br /&gt;
      You should have received a copy of the GNU General Public License&lt;br /&gt;
      along with this program; if not, write to the Free Software&lt;br /&gt;
      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;MD4 Hashing&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
      &amp;lt;!-- md4.js --&amp;gt;&lt;br /&gt;
    &amp;lt;script language=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * A JavaScript implementation of the RSA Data Security, Inc. MD4 Message&lt;br /&gt;
 * Digest Algorithm, as defined in RFC 1320.&lt;br /&gt;
 * Version 2.1 Copyright (C) Jerrad Pierce, Paul Johnston 1999 - 2002.&lt;br /&gt;
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet&lt;br /&gt;
 * Distributed under the BSD License&lt;br /&gt;
 * See http://pajhome.org.uk/crypt/md5 for more info.&lt;br /&gt;
 */&lt;br /&gt;
var hexcase = 0; &lt;br /&gt;
var b64pad  = &amp;quot;&amp;quot;;&lt;br /&gt;
var chrsz   = 8; &lt;br /&gt;
function hex_md4(s){ return binl2hex(core_md4(str2binl(s), s.length * chrsz));}&lt;br /&gt;
function b64_md4(s){ return binl2b64(core_md4(str2binl(s), s.length * chrsz));}&lt;br /&gt;
function str_md4(s){ return binl2str(core_md4(str2binl(s), s.length * chrsz));}&lt;br /&gt;
function hex_hmac_md4(key, data) { return binl2hex(core_hmac_md4(key, data)); }&lt;br /&gt;
function b64_hmac_md4(key, data) { return binl2b64(core_hmac_md4(key, data)); }&lt;br /&gt;
function str_hmac_md4(key, data) { return binl2str(core_hmac_md4(key, data)); }&lt;br /&gt;
function md4_vm_test()&lt;br /&gt;
{&lt;br /&gt;
  return hex_md4(&amp;quot;abc&amp;quot;) == &amp;quot;a448017aaf21d8525fc10ae87aa6729d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
function core_md4(x, len)&lt;br /&gt;
{&lt;br /&gt;
  x[len &amp;gt;&amp;gt; 5] |= 0x80 &amp;lt;&amp;lt; (len % 32);&lt;br /&gt;
  x[(((len + 64) &amp;gt;&amp;gt;&amp;gt; 9) &amp;lt;&amp;lt; 4) + 14] = len;&lt;br /&gt;
  &lt;br /&gt;
  var a =  1732584193;&lt;br /&gt;
  var b = -271733879;&lt;br /&gt;
  var c = -1732584194;&lt;br /&gt;
  var d =  271733878;&lt;br /&gt;
  for(var i = 0; i &amp;lt; x.length; i += 16)&lt;br /&gt;
  {&lt;br /&gt;
    var olda = a;&lt;br /&gt;
    var oldb = b;&lt;br /&gt;
    var oldc = c;&lt;br /&gt;
    var oldd = d;&lt;br /&gt;
    a = md4_ff(a, b, c, d, x[i+ 0], 3 );&lt;br /&gt;
    d = md4_ff(d, a, b, c, x[i+ 1], 7 );&lt;br /&gt;
    c = md4_ff(c, d, a, b, x[i+ 2], 11);&lt;br /&gt;
    b = md4_ff(b, c, d, a, x[i+ 3], 19);&lt;br /&gt;
    a = md4_ff(a, b, c, d, x[i+ 4], 3 );&lt;br /&gt;
    d = md4_ff(d, a, b, c, x[i+ 5], 7 );&lt;br /&gt;
    c = md4_ff(c, d, a, b, x[i+ 6], 11);&lt;br /&gt;
    b = md4_ff(b, c, d, a, x[i+ 7], 19);&lt;br /&gt;
    a = md4_ff(a, b, c, d, x[i+ 8], 3 );&lt;br /&gt;
    d = md4_ff(d, a, b, c, x[i+ 9], 7 );&lt;br /&gt;
    c = md4_ff(c, d, a, b, x[i+10], 11);&lt;br /&gt;
    b = md4_ff(b, c, d, a, x[i+11], 19);&lt;br /&gt;
    a = md4_ff(a, b, c, d, x[i+12], 3 );&lt;br /&gt;
    d = md4_ff(d, a, b, c, x[i+13], 7 );&lt;br /&gt;
    c = md4_ff(c, d, a, b, x[i+14], 11);&lt;br /&gt;
    b = md4_ff(b, c, d, a, x[i+15], 19);&lt;br /&gt;
    a = md4_gg(a, b, c, d, x[i+ 0], 3 );&lt;br /&gt;
    d = md4_gg(d, a, b, c, x[i+ 4], 5 );&lt;br /&gt;
    c = md4_gg(c, d, a, b, x[i+ 8], 9 );&lt;br /&gt;
    b = md4_gg(b, c, d, a, x[i+12], 13);&lt;br /&gt;
    a = md4_gg(a, b, c, d, x[i+ 1], 3 );&lt;br /&gt;
    d = md4_gg(d, a, b, c, x[i+ 5], 5 );&lt;br /&gt;
    c = md4_gg(c, d, a, b, x[i+ 9], 9 );&lt;br /&gt;
    b = md4_gg(b, c, d, a, x[i+13], 13);&lt;br /&gt;
    a = md4_gg(a, b, c, d, x[i+ 2], 3 );&lt;br /&gt;
    d = md4_gg(d, a, b, c, x[i+ 6], 5 );&lt;br /&gt;
    c = md4_gg(c, d, a, b, x[i+10], 9 );&lt;br /&gt;
    b = md4_gg(b, c, d, a, x[i+14], 13);&lt;br /&gt;
    a = md4_gg(a, b, c, d, x[i+ 3], 3 );&lt;br /&gt;
    d = md4_gg(d, a, b, c, x[i+ 7], 5 );&lt;br /&gt;
    c = md4_gg(c, d, a, b, x[i+11], 9 );&lt;br /&gt;
    b = md4_gg(b, c, d, a, x[i+15], 13);&lt;br /&gt;
    a = md4_hh(a, b, c, d, x[i+ 0], 3 );&lt;br /&gt;
    d = md4_hh(d, a, b, c, x[i+ 8], 9 );&lt;br /&gt;
    c = md4_hh(c, d, a, b, x[i+ 4], 11);&lt;br /&gt;
    b = md4_hh(b, c, d, a, x[i+12], 15);&lt;br /&gt;
    a = md4_hh(a, b, c, d, x[i+ 2], 3 );&lt;br /&gt;
    d = md4_hh(d, a, b, c, x[i+10], 9 );&lt;br /&gt;
    c = md4_hh(c, d, a, b, x[i+ 6], 11);&lt;br /&gt;
    b = md4_hh(b, c, d, a, x[i+14], 15);&lt;br /&gt;
    a = md4_hh(a, b, c, d, x[i+ 1], 3 );&lt;br /&gt;
    d = md4_hh(d, a, b, c, x[i+ 9], 9 );&lt;br /&gt;
    c = md4_hh(c, d, a, b, x[i+ 5], 11);&lt;br /&gt;
    b = md4_hh(b, c, d, a, x[i+13], 15);&lt;br /&gt;
    a = md4_hh(a, b, c, d, x[i+ 3], 3 );&lt;br /&gt;
    d = md4_hh(d, a, b, c, x[i+11], 9 );&lt;br /&gt;
    c = md4_hh(c, d, a, b, x[i+ 7], 11);&lt;br /&gt;
    b = md4_hh(b, c, d, a, x[i+15], 15);&lt;br /&gt;
    a = safe_add(a, olda);&lt;br /&gt;
    b = safe_add(b, oldb);&lt;br /&gt;
    c = safe_add(c, oldc);&lt;br /&gt;
    d = safe_add(d, oldd);&lt;br /&gt;
  }&lt;br /&gt;
  return Array(a, b, c, d);&lt;br /&gt;
}&lt;br /&gt;
function md4_cmn(q, a, b, x, s, t)&lt;br /&gt;
{&lt;br /&gt;
  return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);&lt;br /&gt;
}&lt;br /&gt;
function md4_ff(a, b, c, d, x, s)&lt;br /&gt;
{&lt;br /&gt;
  return md4_cmn((b &amp;amp; c) | ((~b) &amp;amp; d), a, 0, x, s, 0);&lt;br /&gt;
}&lt;br /&gt;
function md4_gg(a, b, c, d, x, s)&lt;br /&gt;
{&lt;br /&gt;
  return md4_cmn((b &amp;amp; c) | (b &amp;amp; d) | (c &amp;amp; d), a, 0, x, s, 1518500249);&lt;br /&gt;
}&lt;br /&gt;
function md4_hh(a, b, c, d, x, s)&lt;br /&gt;
{&lt;br /&gt;
  return md4_cmn(b ^ c ^ d, a, 0, x, s, 1859775393);&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
 * Calculate the HMAC-MD4, of a key and some data&lt;br /&gt;
 */&lt;br /&gt;
function core_hmac_md4(key, data)&lt;br /&gt;
{&lt;br /&gt;
  var bkey = str2binl(key);&lt;br /&gt;
  if(bkey.length &amp;gt; 16) bkey = core_md4(bkey, key.length * chrsz);&lt;br /&gt;
  var ipad = Array(16), opad = Array(16);&lt;br /&gt;
  for(var i = 0; i &amp;lt; 16; i++) &lt;br /&gt;
  {&lt;br /&gt;
    ipad[i] = bkey[i] ^ 0x36363636;&lt;br /&gt;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;&lt;br /&gt;
  }&lt;br /&gt;
  var hash = core_md4(ipad.concat(str2binl(data)), 512 + data.length * chrsz);&lt;br /&gt;
  return core_md4(opad.concat(hash), 512 + 128);&lt;br /&gt;
}&lt;br /&gt;
function safe_add(x, y)&lt;br /&gt;
{&lt;br /&gt;
  var lsw = (x &amp;amp; 0xFFFF) + (y &amp;amp; 0xFFFF);&lt;br /&gt;
  var msw = (x &amp;gt;&amp;gt; 16) + (y &amp;gt;&amp;gt; 16) + (lsw &amp;gt;&amp;gt; 16);&lt;br /&gt;
  return (msw &amp;lt;&amp;lt; 16) | (lsw &amp;amp; 0xFFFF);&lt;br /&gt;
}&lt;br /&gt;
function rol(num, cnt)&lt;br /&gt;
{&lt;br /&gt;
  return (num &amp;lt;&amp;lt; cnt) | (num &amp;gt;&amp;gt;&amp;gt; (32 - cnt));&lt;br /&gt;
}&lt;br /&gt;
function str2binl(str)&lt;br /&gt;
{&lt;br /&gt;
  var bin = Array();&lt;br /&gt;
  var mask = (1 &amp;lt;&amp;lt; chrsz) - 1;&lt;br /&gt;
  for(var i = 0; i &amp;lt; str.length * chrsz; i += chrsz)&lt;br /&gt;
    bin[i&amp;gt;&amp;gt;5] |= (str.charCodeAt(i / chrsz) &amp;amp; mask) &amp;lt;&amp;lt; (i%32);&lt;br /&gt;
  return bin;&lt;br /&gt;
}&lt;br /&gt;
function binl2str(bin)&lt;br /&gt;
{&lt;br /&gt;
  var str = &amp;quot;&amp;quot;;&lt;br /&gt;
  var mask = (1 &amp;lt;&amp;lt; chrsz) - 1;&lt;br /&gt;
  for(var i = 0; i &amp;lt; bin.length * 32; i += chrsz)&lt;br /&gt;
    str += String.fromCharCode((bin[i&amp;gt;&amp;gt;5] &amp;gt;&amp;gt;&amp;gt; (i % 32)) &amp;amp; mask);&lt;br /&gt;
  return str;&lt;br /&gt;
}&lt;br /&gt;
function binl2hex(binarray)&lt;br /&gt;
{&lt;br /&gt;
  var hex_tab = hexcase ? &amp;quot;0123456789ABCDEF&amp;quot; : &amp;quot;0123456789abcdef&amp;quot;;&lt;br /&gt;
  var str = &amp;quot;&amp;quot;;&lt;br /&gt;
  for(var i = 0; i &amp;lt; binarray.length * 4; i++)&lt;br /&gt;
  {&lt;br /&gt;
    str += hex_tab.charAt((binarray[i&amp;gt;&amp;gt;2] &amp;gt;&amp;gt; ((i%4)*8+4)) &amp;amp; 0xF) +&lt;br /&gt;
           hex_tab.charAt((binarray[i&amp;gt;&amp;gt;2] &amp;gt;&amp;gt; ((i%4)*8  )) &amp;amp; 0xF);&lt;br /&gt;
  }&lt;br /&gt;
  return str;&lt;br /&gt;
}&lt;br /&gt;
function binl2b64(binarray)&lt;br /&gt;
{&lt;br /&gt;
  var tab = &amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&amp;quot;;&lt;br /&gt;
  var str = &amp;quot;&amp;quot;;&lt;br /&gt;
  for(var i = 0; i &amp;lt; binarray.length * 4; i += 3)&lt;br /&gt;
  {&lt;br /&gt;
    var triplet = (((binarray[i   &amp;gt;&amp;gt; 2] &amp;gt;&amp;gt; 8 * ( i   %4)) &amp;amp; 0xFF) &amp;lt;&amp;lt; 16)&lt;br /&gt;
                | (((binarray[i+1 &amp;gt;&amp;gt; 2] &amp;gt;&amp;gt; 8 * ((i+1)%4)) &amp;amp; 0xFF) &amp;lt;&amp;lt; 8 )&lt;br /&gt;
                |  ((binarray[i+2 &amp;gt;&amp;gt; 2] &amp;gt;&amp;gt; 8 * ((i+2)%4)) &amp;amp; 0xFF);&lt;br /&gt;
    for(var j = 0; j &amp;lt; 4; j++)&lt;br /&gt;
    {&lt;br /&gt;
      if(i * 8 + j * 6 &amp;gt; binarray.length * 32) str += b64pad;&lt;br /&gt;
      else str += tab.charAt((triplet &amp;gt;&amp;gt; 6*(3-j)) &amp;amp; 0x3F);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return str;&lt;br /&gt;
}&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;form&amp;gt;&lt;br /&gt;
      &amp;lt;font color=#000000 size=3&amp;gt;Input&amp;lt;/font&amp;gt;  &amp;lt;/td&amp;gt;&amp;lt;td &amp;gt; &amp;lt;input type=text name=input size=40&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;font color=#000000 size=3&amp;gt;Result&amp;lt;/font&amp;gt; &amp;lt;/td&amp;gt;&amp;lt;td &amp;gt; &amp;lt;input type=text name=hash size=40&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;input type=button value=&amp;quot;MD4 It!&amp;quot; onclick=&amp;quot;hash.value = hex_md4(input.value)&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>