<?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%2FRIPEMD_160_Hashing</id>
		<title>JavaScript DHTML/Security/RIPEMD 160 Hashing - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_DHTML%2FSecurity%2FRIPEMD_160_Hashing"/>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Security/RIPEMD_160_Hashing&amp;action=history"/>
		<updated>2026-04-04T15:33:06Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_DHTML/Security/RIPEMD_160_Hashing&amp;diff=3676&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/RIPEMD_160_Hashing&amp;diff=3676&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/RIPEMD_160_Hashing&amp;diff=3677&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Security/RIPEMD_160_Hashing&amp;diff=3677&amp;oldid=prev"/>
				<updated>2010-05-26T07:27:13Z</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;==RIPEMD-160 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;RIPEMD-160 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;!-- ripemd-160.js --&amp;gt;&lt;br /&gt;
    &amp;lt;script language=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
var RMDsize   = 160;&lt;br /&gt;
var X = new Array();&lt;br /&gt;
function ROL(x, n)&lt;br /&gt;
{&lt;br /&gt;
  return new Number ((x &amp;lt;&amp;lt; n) | ( x &amp;gt;&amp;gt;&amp;gt; (32 - n)));&lt;br /&gt;
}&lt;br /&gt;
function F(x, y, z)&lt;br /&gt;
{&lt;br /&gt;
  return new Number(x ^ y ^ z);&lt;br /&gt;
}&lt;br /&gt;
function G(x, y, z)&lt;br /&gt;
{&lt;br /&gt;
  return new Number((x &amp;amp; y) | (~x &amp;amp; z));&lt;br /&gt;
}&lt;br /&gt;
function H(x, y, z)&lt;br /&gt;
{&lt;br /&gt;
  return new Number((x | ~y) ^ z);&lt;br /&gt;
}&lt;br /&gt;
function I(x, y, z)&lt;br /&gt;
{&lt;br /&gt;
  return new Number((x &amp;amp; z) | (y &amp;amp; ~z));&lt;br /&gt;
}&lt;br /&gt;
function J(x, y, z)&lt;br /&gt;
{&lt;br /&gt;
  return new Number(x ^ (y | ~z));&lt;br /&gt;
}&lt;br /&gt;
function mixOneRound(a, b, c, d, e, x, s, roundNumber)&lt;br /&gt;
{&lt;br /&gt;
  switch (roundNumber)&lt;br /&gt;
  {&lt;br /&gt;
    case 0 : a += F(b, c, d) + x + 0x00000000; break;&lt;br /&gt;
    case 1 : a += G(b, c, d) + x + 0x5a827999; break;&lt;br /&gt;
    case 2 : a += H(b, c, d) + x + 0x6ed9eba1; break;&lt;br /&gt;
    case 3 : a += I(b, c, d) + x + 0x8f1bbcdc; break;&lt;br /&gt;
    case 4 : a += J(b, c, d) + x + 0xa953fd4e; break;&lt;br /&gt;
    case 5 : a += J(b, c, d) + x + 0x50a28be6; break;&lt;br /&gt;
    case 6 : a += I(b, c, d) + x + 0x5c4dd124; break;&lt;br /&gt;
    case 7 : a += H(b, c, d) + x + 0x6d703ef3; break;&lt;br /&gt;
    case 8 : a += G(b, c, d) + x + 0x7a6d76e9; break;&lt;br /&gt;
    case 9 : a += F(b, c, d) + x + 0x00000000; break;&lt;br /&gt;
    &lt;br /&gt;
    default : document.write(&amp;quot;Bogus round number&amp;quot;); break;&lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  a = ROL(a, s) + e;&lt;br /&gt;
  c = ROL(c, 10);&lt;br /&gt;
  a &amp;amp;= 0xffffffff;&lt;br /&gt;
  b &amp;amp;= 0xffffffff;&lt;br /&gt;
  c &amp;amp;= 0xffffffff;&lt;br /&gt;
  d &amp;amp;= 0xffffffff;&lt;br /&gt;
  e &amp;amp;= 0xffffffff;&lt;br /&gt;
  var retBlock = new Array();&lt;br /&gt;
  retBlock[0] = a;&lt;br /&gt;
  retBlock[1] = b;&lt;br /&gt;
  retBlock[2] = c;&lt;br /&gt;
  retBlock[3] = d;&lt;br /&gt;
  retBlock[4] = e;&lt;br /&gt;
  retBlock[5] = x;&lt;br /&gt;
  retBlock[6] = s;&lt;br /&gt;
  return retBlock;&lt;br /&gt;
}&lt;br /&gt;
function MDinit (MDbuf)&lt;br /&gt;
{&lt;br /&gt;
  MDbuf[0] = 0x67452301;&lt;br /&gt;
  MDbuf[1] = 0xefcdab89;&lt;br /&gt;
  MDbuf[2] = 0x98badcfe;&lt;br /&gt;
  MDbuf[3] = 0x10325476;&lt;br /&gt;
  MDbuf[4] = 0xc3d2e1f0;&lt;br /&gt;
}&lt;br /&gt;
var ROLs = [&lt;br /&gt;
  [11, 14, 15, 12,  5,  8,  7,  9, 11, 13, 14, 15,  6,  7,  9,  8],&lt;br /&gt;
  [ 7,  6,  8, 13, 11,  9,  7, 15,  7, 12, 15,  9, 11,  7, 13, 12],&lt;br /&gt;
  [11, 13,  6,  7, 14,  9, 13, 15, 14,  8, 13,  6,  5, 12,  7,  5],&lt;br /&gt;
  [11, 12, 14, 15, 14, 15,  9,  8,  9, 14,  5,  6,  8,  6,  5, 12],&lt;br /&gt;
  [ 9, 15,  5, 11,  6,  8, 13, 12,  5, 12, 13, 14, 11,  8,  5,  6],&lt;br /&gt;
  [ 8,  9,  9, 11, 13, 15, 15,  5,  7,  7,  8, 11, 14, 14, 12,  6],&lt;br /&gt;
  [ 9, 13, 15,  7, 12,  8,  9, 11,  7,  7, 12,  7,  6, 15, 13, 11],&lt;br /&gt;
  [ 9,  7, 15, 11,  8,  6,  6, 14, 12, 13,  5, 14, 13, 13,  7,  5],&lt;br /&gt;
  [15,  5,  8, 11, 14, 14,  6, 14,  6,  9, 12,  9, 12,  5, 15,  8],&lt;br /&gt;
  [ 8,  5, 12,  9, 12,  5, 14,  6,  8, 13,  6,  5, 15, 13, 11, 11]&lt;br /&gt;
];&lt;br /&gt;
var indexes = [&lt;br /&gt;
  [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15],&lt;br /&gt;
  [ 7,  4, 13,  1, 10,  6, 15,  3, 12,  0,  9,  5,  2, 14, 11,  8],&lt;br /&gt;
  [ 3, 10, 14,  4,  9, 15,  8,  1,  2,  7,  0,  6, 13, 11,  5, 12],&lt;br /&gt;
  [ 1,  9, 11, 10,  0,  8, 12,  4, 13,  3,  7, 15, 14,  5,  6,  2],&lt;br /&gt;
  [ 4,  0,  5,  9,  7, 12,  2, 10, 14,  1,  3,  8, 11,  6, 15, 13],&lt;br /&gt;
  [ 5, 14,  7,  0,  9,  2, 11,  4, 13,  6, 15,  8,  1, 10,  3, 12],&lt;br /&gt;
  [ 6, 11,  3,  7,  0, 13,  5, 10, 14, 15,  8, 12,  4,  9,  1,  2],&lt;br /&gt;
  [15,  5,  1,  3,  7, 14,  6,  9, 11,  8, 12,  2, 10,  0,  4, 13],&lt;br /&gt;
  [ 8,  6,  4,  1,  3, 11, 15,  0,  5, 12,  2, 13,  9,  7, 10, 14],&lt;br /&gt;
  [12, 15, 10,  4,  1,  5,  8,  7,  6,  2, 13, 14,  0,  3,  9, 11]&lt;br /&gt;
];&lt;br /&gt;
function compress (MDbuf, X)&lt;br /&gt;
{&lt;br /&gt;
  blockA = new Array();&lt;br /&gt;
  blockB = new Array();&lt;br /&gt;
  var retBlock;&lt;br /&gt;
  for (var i=0; i &amp;lt; 5; i++)&lt;br /&gt;
  {&lt;br /&gt;
    blockA[i] = new Number(MDbuf[i]);&lt;br /&gt;
    blockB[i] = new Number(MDbuf[i]);&lt;br /&gt;
  }&lt;br /&gt;
  var step = 0;&lt;br /&gt;
  for (var j = 0; j &amp;lt; 5; j++)&lt;br /&gt;
  {&lt;br /&gt;
    for (var i = 0; i &amp;lt; 16; i++)&lt;br /&gt;
    {&lt;br /&gt;
      retBlock = mixOneRound(&lt;br /&gt;
        blockA[(step+0) % 5],&lt;br /&gt;
        blockA[(step+1) % 5],   &lt;br /&gt;
        blockA[(step+2) % 5],   &lt;br /&gt;
        blockA[(step+3) % 5],   &lt;br /&gt;
        blockA[(step+4) % 5],  &lt;br /&gt;
        X[indexes[j][i]], &lt;br /&gt;
        ROLs[j][i],&lt;br /&gt;
        j&lt;br /&gt;
      );&lt;br /&gt;
      blockA[(step+0) % 5] = retBlock[0];&lt;br /&gt;
      blockA[(step+1) % 5] = retBlock[1];&lt;br /&gt;
      blockA[(step+2) % 5] = retBlock[2];&lt;br /&gt;
      blockA[(step+3) % 5] = retBlock[3];&lt;br /&gt;
      blockA[(step+4) % 5] = retBlock[4];&lt;br /&gt;
      step += 4;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  step = 0;&lt;br /&gt;
  for (var j = 5; j &amp;lt; 10; j++)&lt;br /&gt;
  {&lt;br /&gt;
    for (var i = 0; i &amp;lt; 16; i++)&lt;br /&gt;
    {  &lt;br /&gt;
      retBlock = mixOneRound(&lt;br /&gt;
        blockB[(step+0) % 5], &lt;br /&gt;
        blockB[(step+1) % 5], &lt;br /&gt;
        blockB[(step+2) % 5], &lt;br /&gt;
        blockB[(step+3) % 5], &lt;br /&gt;
        blockB[(step+4) % 5],  &lt;br /&gt;
        X[indexes[j][i]], &lt;br /&gt;
        ROLs[j][i],&lt;br /&gt;
        j&lt;br /&gt;
      );&lt;br /&gt;
      blockB[(step+0) % 5] = retBlock[0];&lt;br /&gt;
      blockB[(step+1) % 5] = retBlock[1];&lt;br /&gt;
      blockB[(step+2) % 5] = retBlock[2];&lt;br /&gt;
      blockB[(step+3) % 5] = retBlock[3];&lt;br /&gt;
      blockB[(step+4) % 5] = retBlock[4];&lt;br /&gt;
      step += 4;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  blockB[3] += blockA[2] + MDbuf[1];&lt;br /&gt;
  MDbuf[1]  = MDbuf[2] + blockA[3] + blockB[4];&lt;br /&gt;
  MDbuf[2]  = MDbuf[3] + blockA[4] + blockB[0];&lt;br /&gt;
  MDbuf[3]  = MDbuf[4] + blockA[0] + blockB[1];&lt;br /&gt;
  MDbuf[4]  = MDbuf[0] + blockA[1] + blockB[2];&lt;br /&gt;
  MDbuf[0]  = blockB[3];&lt;br /&gt;
}&lt;br /&gt;
function zeroX(X)&lt;br /&gt;
{&lt;br /&gt;
  for (var i = 0; i &amp;lt; 16; i++) { X[i] = 0; }&lt;br /&gt;
}&lt;br /&gt;
function MDfinish (MDbuf, strptr, lswlen, mswlen)&lt;br /&gt;
{&lt;br /&gt;
  var X = new Array(16);&lt;br /&gt;
  zeroX(X);&lt;br /&gt;
  var j = 0;&lt;br /&gt;
  for (var i=0; i &amp;lt; (lswlen &amp;amp; 63); i++)&lt;br /&gt;
  {&lt;br /&gt;
    X[i &amp;gt;&amp;gt;&amp;gt; 2] ^= (strptr.charCodeAt(j++) &amp;amp; 255) &amp;lt;&amp;lt; (8 * (i &amp;amp; 3));&lt;br /&gt;
  }&lt;br /&gt;
  X[(lswlen &amp;gt;&amp;gt;&amp;gt; 2) &amp;amp; 15] ^= 1 &amp;lt;&amp;lt; (8 * (lswlen &amp;amp; 3) + 7);&lt;br /&gt;
  if ((lswlen &amp;amp; 63) &amp;gt; 55)&lt;br /&gt;
  {&lt;br /&gt;
    compress(MDbuf, X);&lt;br /&gt;
    var X = new Array(16);&lt;br /&gt;
    zeroX(X);&lt;br /&gt;
  }&lt;br /&gt;
  X[14] = lswlen &amp;lt;&amp;lt; 3;&lt;br /&gt;
  X[15] = (lswlen &amp;gt;&amp;gt;&amp;gt; 29) | (mswlen &amp;lt;&amp;lt; 3);&lt;br /&gt;
  compress(MDbuf, X);&lt;br /&gt;
}&lt;br /&gt;
function BYTES_TO_DWORD(fourChars)&lt;br /&gt;
{&lt;br /&gt;
  var tmp  = (fourChars.charCodeAt(3) &amp;amp; 255) &amp;lt;&amp;lt; 24;&lt;br /&gt;
  tmp   |= (fourChars.charCodeAt(2) &amp;amp; 255) &amp;lt;&amp;lt; 16;&lt;br /&gt;
  tmp   |= (fourChars.charCodeAt(1) &amp;amp; 255) &amp;lt;&amp;lt; 8;&lt;br /&gt;
  tmp   |= (fourChars.charCodeAt(0) &amp;amp; 255);  &lt;br /&gt;
  return tmp;&lt;br /&gt;
}&lt;br /&gt;
function RMD(message)&lt;br /&gt;
{&lt;br /&gt;
  var MDbuf   = new Array(RMDsize / 32);&lt;br /&gt;
  var hashcode   = new Array(RMDsize / 8);&lt;br /&gt;
  var length;  &lt;br /&gt;
  var nbytes;&lt;br /&gt;
  MDinit(MDbuf);&lt;br /&gt;
  length = message.length;&lt;br /&gt;
  var X = new Array(16);&lt;br /&gt;
  zeroX(X);&lt;br /&gt;
  var j=0;&lt;br /&gt;
  for (var nbytes=length; nbytes &amp;gt; 63; nbytes -= 64)&lt;br /&gt;
  {&lt;br /&gt;
    for (var i=0; i &amp;lt; 16; i++)&lt;br /&gt;
    {&lt;br /&gt;
      X[i] = BYTES_TO_DWORD(message.substr(j, 4));&lt;br /&gt;
      j += 4;&lt;br /&gt;
    }&lt;br /&gt;
    compress(MDbuf, X);&lt;br /&gt;
  }&lt;br /&gt;
  MDfinish(MDbuf, message.substr(j), length, 0);&lt;br /&gt;
  for (var i=0; i &amp;lt; RMDsize / 8; i += 4)&lt;br /&gt;
  {&lt;br /&gt;
    hashcode[i]   =  MDbuf[i &amp;gt;&amp;gt;&amp;gt; 2]   &amp;amp; 255;&lt;br /&gt;
    hashcode[i+1] = (MDbuf[i &amp;gt;&amp;gt;&amp;gt; 2] &amp;gt;&amp;gt;&amp;gt; 8)   &amp;amp; 255;&lt;br /&gt;
    hashcode[i+2] = (MDbuf[i &amp;gt;&amp;gt;&amp;gt; 2] &amp;gt;&amp;gt;&amp;gt; 16) &amp;amp; 255;&lt;br /&gt;
    hashcode[i+3] = (MDbuf[i &amp;gt;&amp;gt;&amp;gt; 2] &amp;gt;&amp;gt;&amp;gt; 24) &amp;amp; 255;&lt;br /&gt;
  }&lt;br /&gt;
  return hashcode;&lt;br /&gt;
}&lt;br /&gt;
function toHex32(x)&lt;br /&gt;
{&lt;br /&gt;
  var hexChars = &amp;quot;0123456789abcdef&amp;quot;;&lt;br /&gt;
  var hex = &amp;quot;&amp;quot;;&lt;br /&gt;
  for (var i = 0; i &amp;lt; 2; i++)&lt;br /&gt;
  {&lt;br /&gt;
    hex = String(hexChars.charAt(x &amp;amp; 0xf)).concat(hex);&lt;br /&gt;
    x &amp;gt;&amp;gt;&amp;gt;= 4;&lt;br /&gt;
  }&lt;br /&gt;
  return hex;&lt;br /&gt;
}&lt;br /&gt;
function toRMDstring(hashcode)&lt;br /&gt;
{&lt;br /&gt;
  var retString = &amp;quot;&amp;quot;;&lt;br /&gt;
  for (var i=0; i &amp;lt; RMDsize/8; i++)&lt;br /&gt;
  {&lt;br /&gt;
    retString += toHex32(hashcode[i]);&lt;br /&gt;
  }  &lt;br /&gt;
  return retString;  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function RMDstring(message)&lt;br /&gt;
{&lt;br /&gt;
  var hashcode = RMD(message);&lt;br /&gt;
  var retString = &amp;quot;&amp;quot;;&lt;br /&gt;
  for (var i=0; i &amp;lt; RMDsize/8; i++)&lt;br /&gt;
  {&lt;br /&gt;
    retString += toHex32(hashcode[i]);&lt;br /&gt;
  }  &lt;br /&gt;
  return retString;  &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;&lt;br /&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;&lt;br /&gt;
      &amp;lt;input type=text name=hash size=50&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;input type=button value=&amp;quot;Hash It!&amp;quot; onclick=&amp;quot;hash.value = RMDstring(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>