MD5 script

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Disco Octopus

    MD5 script

    Hi,

    Does anyone know of a MD5 script written in javascript?

    Thanks



  • Jerry Park

    #2
    Re: MD5 script

    Disco Octopus wrote:[color=blue]
    > Hi,
    >
    > Does anyone know of a MD5 script written in javascript?
    >
    > Thanks
    >
    >
    >[/color]
    A quick Google search yeilds several.
    Here is one:
    I provide free JavaScript implementations of these secure hash algorithms. Their most common applications is for improving security on web login forms.

    Comment

    • Disco Octopus

      #3
      Re: MD5 script

      Jerry Park wrote:[color=blue]
      > Disco Octopus wrote:[color=green]
      >> Hi,
      >>
      >> Does anyone know of a MD5 script written in javascript?
      >>
      >> Thanks
      >>
      >>
      >>[/color]
      > A quick Google search yeilds several.
      > Here is one:
      > http://pajhome.org.uk/crypt/md5/[/color]

      Yes. you are correct. Thanks.

      What I am *really* after is some code (of any language) that will show me
      how to generate an MD5 output/fingerprint that is _easy_ to follow, and to
      rewrite in other languages. The language that I would like to write it for
      is in UNIFACE. Now I know that there is no UNIFACE code that exists to
      generate MD5 output. I can follow most languages, but some bits of some
      languages are not quite UNIFACE *friendly*. For example there is no easy
      way to translate the following into a UNIFACE piece of code....


      x[len >> 5] |= 0x80 << ((len) % 32);
      x[(((len + 64) >>> 9) << 4) + 14] = len;



      so, I am *really* looking for something that is easy to read and translate.

      ta


      Comment

      • lallous

        #4
        Re: MD5 script

        If I recall well, mail.yahoo.com uses Javascript/MD5 when you login using
        non-secure mode.

        --
        Elias
        "Disco Octopus" <discooctopusN0 5PAM@yahoo.com> wrote in message
        news:RN_Rb.349$ KW.19163@news.o ptus.net.au...[color=blue]
        > Hi,
        >
        > Does anyone know of a MD5 script written in javascript?
        >
        > Thanks
        >
        >
        >[/color]


        Comment

        • Don Grover

          #5
          Re: MD5 script

          Here is one using vbscript,.
          Called like this sRetVal = SHADIGEST(sMess age)

          <SCRIPT LANGUAGE="VBScr ipt">
          <%
          ' DON NOT EDIT THIS FILE, USER ACCESS WILL BE NON FUNCTIONAL
          'AUSTRALIAN SCIENTIFIC SOFTWARE
          'PHONE (03) 776 0728 Mobile: 0412 548 333 Email dgrover@assoft. com.au
          ' This MD5 algorithm is one of the industry standard methods for generating
          digital
          ' signatures.
          '
          '**Start Encode**

          Private m_lOnBits(30)
          Private m_l2Power(30)
          Private K(63)

          Private Const BITS_TO_A_BYTE = 8
          Private Const BYTES_TO_A_WORD = 4
          Private Const BITS_TO_A_WORD = 32

          m_lOnBits(0) = CLng(1)
          m_lOnBits(1) = CLng(3)
          m_lOnBits(2) = CLng(7)
          m_lOnBits(3) = CLng(15)
          m_lOnBits(4) = CLng(31)
          m_lOnBits(5) = CLng(63)
          m_lOnBits(6) = CLng(127)
          m_lOnBits(7) = CLng(255)
          m_lOnBits(8) = CLng(511)
          m_lOnBits(9) = CLng(1023)
          m_lOnBits(10) = CLng(2047)
          m_lOnBits(11) = CLng(4095)
          m_lOnBits(12) = CLng(8191)
          m_lOnBits(13) = CLng(16383)
          m_lOnBits(14) = CLng(32767)
          m_lOnBits(15) = CLng(65535)
          m_lOnBits(16) = CLng(131071)
          m_lOnBits(17) = CLng(262143)
          m_lOnBits(18) = CLng(524287)
          m_lOnBits(19) = CLng(1048575)
          m_lOnBits(20) = CLng(2097151)
          m_lOnBits(21) = CLng(4194303)
          m_lOnBits(22) = CLng(8388607)
          m_lOnBits(23) = CLng(16777215)
          m_lOnBits(24) = CLng(33554431)
          m_lOnBits(25) = CLng(67108863)
          m_lOnBits(26) = CLng(134217727)
          m_lOnBits(27) = CLng(268435455)
          m_lOnBits(28) = CLng(536870911)
          m_lOnBits(29) = CLng(1073741823 )
          m_lOnBits(30) = CLng(2147483647 )

          m_l2Power(0) = CLng(1)
          m_l2Power(1) = CLng(2)
          m_l2Power(2) = CLng(4)
          m_l2Power(3) = CLng(8)
          m_l2Power(4) = CLng(16)
          m_l2Power(5) = CLng(32)
          m_l2Power(6) = CLng(64)
          m_l2Power(7) = CLng(128)
          m_l2Power(8) = CLng(256)
          m_l2Power(9) = CLng(512)
          m_l2Power(10) = CLng(1024)
          m_l2Power(11) = CLng(2048)
          m_l2Power(12) = CLng(4096)
          m_l2Power(13) = CLng(8192)
          m_l2Power(14) = CLng(16384)
          m_l2Power(15) = CLng(32768)
          m_l2Power(16) = CLng(65536)
          m_l2Power(17) = CLng(131072)
          m_l2Power(18) = CLng(262144)
          m_l2Power(19) = CLng(524288)
          m_l2Power(20) = CLng(1048576)
          m_l2Power(21) = CLng(2097152)
          m_l2Power(22) = CLng(4194304)
          m_l2Power(23) = CLng(8388608)
          m_l2Power(24) = CLng(16777216)
          m_l2Power(25) = CLng(33554432)
          m_l2Power(26) = CLng(67108864)
          m_l2Power(27) = CLng(134217728)
          m_l2Power(28) = CLng(268435456)
          m_l2Power(29) = CLng(536870912)
          m_l2Power(30) = CLng(1073741824 )

          K(0) = &H428A2F98
          K(1) = &H71374491
          K(2) = &HB5C0FBCF
          K(3) = &HE9B5DBA5
          K(4) = &H3956C25B
          K(5) = &H59F111F1
          K(6) = &H923F82A4
          K(7) = &HAB1C5ED5
          K(8) = &HD807AA98
          K(9) = &H12835B01
          K(10) = &H243185BE
          K(11) = &H550C7DC3
          K(12) = &H72BE5D74
          K(13) = &H80DEB1FE
          K(14) = &H9BDC06A7
          K(15) = &HC19BF174
          K(16) = &HE49B69C1
          K(17) = &HEFBE4786
          K(18) = &HFC19DC6
          K(19) = &H240CA1CC
          K(20) = &H2DE92C6F
          K(21) = &H4A7484AA
          K(22) = &H5CB0A9DC
          K(23) = &H76F988DA
          K(24) = &H983E5152
          K(25) = &HA831C66D
          K(26) = &HB00327C8
          K(27) = &HBF597FC7
          K(28) = &HC6E00BF3
          K(29) = &HD5A79147
          K(30) = &H6CA6351
          K(31) = &H14292967
          K(32) = &H27B70A85
          K(33) = &H2E1B2138
          K(34) = &H4D2C6DFC
          K(35) = &H53380D13
          K(36) = &H650A7354
          K(37) = &H766A0ABB
          K(38) = &H81C2C92E
          K(39) = &H92722C85
          K(40) = &HA2BFE8A1
          K(41) = &HA81A664B
          K(42) = &HC24B8B70
          K(43) = &HC76C51A3
          K(44) = &HD192E819
          K(45) = &HD6990624
          K(46) = &HF40E3585
          K(47) = &H106AA070
          K(48) = &H19A4C116
          K(49) = &H1E376C08
          K(50) = &H2748774C
          K(51) = &H34B0BCB5
          K(52) = &H391C0CB3
          K(53) = &H4ED8AA4A
          K(54) = &H5B9CCA4F
          K(55) = &H682E6FF3
          K(56) = &H748F82EE
          K(57) = &H78A5636F
          K(58) = &H84C87814
          K(59) = &H8CC70208
          K(60) = &H90BEFFFA
          K(61) = &HA4506CEB
          K(62) = &HBEF9A3F7
          K(63) = &HC67178F2

          Private Function LShift(lValue, iShiftBits)
          If iShiftBits = 0 Then
          LShift = lValue
          Exit Function
          ElseIf iShiftBits = 31 Then
          If lValue And 1 Then
          LShift = &H80000000
          Else
          LShift = 0
          End If
          Exit Function
          ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
          Err.Raise 6
          End If

          If (lValue And m_l2Power(31 - iShiftBits)) Then
          LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) *
          m_l2Power(iShif tBits)) Or &H80000000
          Else
          LShift = ((lValue And m_lOnBits(31 - iShiftBits)) *
          m_l2Power(iShif tBits))
          End If
          End Function

          Private Function RShift(lValue, iShiftBits)
          If iShiftBits = 0 Then
          RShift = lValue
          Exit Function
          ElseIf iShiftBits = 31 Then
          If lValue And &H80000000 Then
          RShift = 1
          Else
          RShift = 0
          End If
          Exit Function
          ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
          Err.Raise 6
          End If

          RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShif tBits)

          If (lValue And &H80000000) Then
          RShift = (RShift Or (&H40000000 \ m_l2Power(iShif tBits - 1)))
          End If
          End Function

          Private Function AddUnsigned(lX, lY)
          Dim lX4
          Dim lY4
          Dim lX8
          Dim lY8
          Dim lResult

          lX8 = lX And &H80000000
          lY8 = lY And &H80000000
          lX4 = lX And &H40000000
          lY4 = lY And &H40000000

          lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)

          If lX4 And lY4 Then
          lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
          ElseIf lX4 Or lY4 Then
          If lResult And &H40000000 Then
          lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
          Else
          lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
          End If
          Else
          lResult = lResult Xor lX8 Xor lY8
          End If

          AddUnsigned = lResult
          End Function

          Private Function Ch(x, y, z)
          Ch = ((x And y) Xor ((Not x) And z))
          End Function

          Private Function Maj(x, y, z)
          Maj = ((x And y) Xor (x And z) Xor (y And z))
          End Function

          Private Function S(x, n)
          S = (RShift(x, (n And m_lOnBits(4))) Or LShift(x, (32 - (n And
          m_lOnBits(4)))) )
          End Function

          Private Function R(x, n)
          R = RShift(x, CInt(n And m_lOnBits(4)))
          End Function

          Private Function Sigma0(x)
          Sigma0 = (S(x, 2) Xor S(x, 13) Xor S(x, 22))
          End Function

          Private Function Sigma1(x)
          Sigma1 = (S(x, 6) Xor S(x, 11) Xor S(x, 25))
          End Function

          Private Function Gamma0(x)
          Gamma0 = (S(x, 7) Xor S(x, 18) Xor R(x, 3))
          End Function

          Private Function Gamma1(x)
          Gamma1 = (S(x, 17) Xor S(x, 19) Xor R(x, 10))
          End Function

          Private Function ConvertToWordAr ray(sMessage)
          Dim lMessageLength
          Dim lNumberOfWords
          Dim lWordArray()
          Dim lBytePosition
          Dim lByteCount
          Dim lWordCount
          Dim lByte

          Const MODULUS_BITS = 512
          Const CONGRUENT_BITS = 448

          lMessageLength = Len(sMessage)

          lNumberOfWords = (((lMessageLeng th + ((MODULUS_BITS - CONGRUENT_BITS) \
          BITS_TO_A_BYTE) ) \ (MODULUS_BITS \ BITS_TO_A_BYTE) ) + 1) * (MODULUS_BITS \
          BITS_TO_A_WORD)
          ReDim lWordArray(lNum berOfWords - 1)

          lBytePosition = 0
          lByteCount = 0
          Do Until lByteCount >= lMessageLength
          lWordCount = lByteCount \ BYTES_TO_A_WORD

          lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD )) *
          BITS_TO_A_BYTE

          lByte = AscB(Mid(sMessa ge, lByteCount + 1, 1))

          lWordArray(lWor dCount) = lWordArray(lWor dCount) Or LShift(lByte,
          lBytePosition)
          lByteCount = lByteCount + 1
          Loop

          lWordCount = lByteCount \ BYTES_TO_A_WORD
          lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD )) * BITS_TO_A_BYTE

          lWordArray(lWor dCount) = lWordArray(lWor dCount) Or LShift(&H80,
          lBytePosition)

          lWordArray(lNum berOfWords - 1) = LShift(lMessage Length, 3)
          lWordArray(lNum berOfWords - 2) = RShift(lMessage Length, 29)

          ConvertToWordAr ray = lWordArray
          End Function

          Public Function SHADIGEST(sMess age)
          Dim HASH(7)
          Dim M
          Dim W(63)
          Dim a
          Dim b
          Dim c
          Dim d
          Dim e
          Dim f
          Dim g
          Dim h
          Dim i
          Dim j
          Dim T1
          Dim T2

          HASH(0) = &H6A09E667
          HASH(1) = &HBB67AE85
          HASH(2) = &H3C6EF372
          HASH(3) = &HA54FF53A
          HASH(4) = &H510E527F
          HASH(5) = &H9B05688C
          HASH(6) = &H1F83D9AB
          HASH(7) = &H5BE0CD19

          M = ConvertToWordAr ray(sMessage)

          For i = 0 To UBound(M) Step 16
          a = HASH(0)
          b = HASH(1)
          c = HASH(2)
          d = HASH(3)
          e = HASH(4)
          f = HASH(5)
          g = HASH(6)
          h = HASH(7)

          For j = 0 To 63
          If j < 16 Then
          W(j) = M(j + i)
          Else
          W(j) = AddUnsigned(Add Unsigned(AddUns igned(Gamma1(W( j - 2)),
          W(j - 7)), Gamma0(W(j - 15))), W(j - 16))
          End If

          T1 = AddUnsigned(Add Unsigned(AddUns igned(AddUnsign ed(h,
          Sigma1(e)), Ch(e, f, g)), K(j)), W(j))
          T2 = AddUnsigned(Sig ma0(a), Maj(a, b, c))

          h = g
          g = f
          f = e
          e = AddUnsigned(d, T1)
          d = c
          c = b
          b = a
          a = AddUnsigned(T1, T2)
          Next

          HASH(0) = AddUnsigned(a, HASH(0))
          HASH(1) = AddUnsigned(b, HASH(1))
          HASH(2) = AddUnsigned(c, HASH(2))
          HASH(3) = AddUnsigned(d, HASH(3))
          HASH(4) = AddUnsigned(e, HASH(4))
          HASH(5) = AddUnsigned(f, HASH(5))
          HASH(6) = AddUnsigned(g, HASH(6))
          HASH(7) = AddUnsigned(h, HASH(7))
          Next

          SHADIGEST = LCase(Right("00 000000" & Hex(HASH(0)), 8) & Right("00000000 "
          & Hex(HASH(1)), 8) & Right("00000000 " & Hex(HASH(2)), 8) & Right("00000000 "
          & Hex(HASH(3)), 8) & Right("00000000 " & Hex(HASH(4)), 8) & Right("00000000 "
          & Hex(HASH(5)), 8) & Right("00000000 " & Hex(HASH(6)), 8) & Right("00000000 "
          & Hex(HASH(7)), 8))
          End Function
          %>
          </SCRIPT>




          "Disco Octopus" <discooctopusN0 5PAM@yahoo.com> wrote in message
          news:RN_Rb.349$ KW.19163@news.o ptus.net.au...[color=blue]
          > Hi,
          >
          > Does anyone know of a MD5 script written in javascript?
          >
          > Thanks
          >
          >
          >[/color]


          Comment

          • DJ WIce

            #6
            Re: MD5 script

            : I can follow most languages, but some bits of some
            : languages are not quite UNIFACE *friendly*. For example there is no easy
            : way to translate the following into a UNIFACE piece of code....
            :
            : x[len >> 5] |= 0x80 << ((len) % 32);
            : x[(((len + 64) >>> 9) << 4) + 14] = len;

            Maybe you can tell us what mathematical fuctions UNIFACE has:

            Power
            Shift
            Div
            Mod
            length_of_input

            Else you might need a mathematian to help you,
            Wouter


            Comment

            • DJ WIce

              #7
              Re: MD5 script

              : Else you might need a mathematian to help you,
              typo: sould be mathematician :-)


              Comment

              • Disco Octopus

                #8
                Re: MD5 script

                DJ WIce wrote:[color=blue][color=green]
                >> I can follow most languages, but some bits of some
                >> languages are not quite UNIFACE *friendly*. For example there is no
                >> easy way to translate the following into a UNIFACE piece of code....
                >>
                >> x[len >> 5] |= 0x80 << ((len) % 32);
                >> x[(((len + 64) >>> 9) << 4) + 14] = len;[/color]
                >
                > Maybe you can tell us what mathematical fuctions UNIFACE has:
                >
                > Power
                > Shift
                > Div
                > Mod
                > length_of_input[/color]


                here is what is available in UNIFACE proc language regarding mathematical
                usage....


                abs - Return the absolute value of X (|X|).
                acos - Return the arc cosine of X.
                asin - Return the arc sine of X.
                atan - Return the arc tangent of X.
                cos - Return the cosine of X.
                e - Return the value of e.
                $exp Return the exponential of X (eX).
                $exp10 Return the base 10 exponential of X (10X).
                fact - Calculate the factorial of X (X!).
                frac - Return the fractional part of X.
                int - Return the integer part of X.
                log - Return the natural logarithm of X (logeX).
                log10 - Return the base 10 logarithm of X (log10X).
                pi - Return the value of pi.
                power Calculate the value of X raised to the power of Y (XY).
                sin - Return the sine of X.
                sqrt - Calculate the square root of X.
                tan - Return the tangent of X.
                length - return character length of item
                ^ - modulus
                + - plus
                - - minus
                * - multiply
                / - divide
                <, <=, !=, =, ==, >=, >
                & - logical and
                | - logical or
                !- logical not

                there is also something (cant think of it right now) that returns the
                numeric ascii value of a character.

                Thanks


                Comment

                • DJ WIce

                  #9
                  Re: MD5 script

                  : here is what is available in UNIFACE proc language regarding mathematical
                  : usage....
                  :
                  : <snip>
                  Is there some code to convert between the hexadecimal and decimal system?
                  &h or # or something.
                  Does power calculate the power of X to negative values of Y?

                  Wouter



                  Comment

                  • Richard Cornford

                    #10
                    Re: MD5 script

                    "Disco Octopus" <discooctopusN0 5PAM@yahoo.com> wrote in message
                    news:xbiSb.366$ KW.20897@news.o ptus.net.au...
                    <snip>[color=blue][color=green][color=darkred]
                    >>> x[len >> 5] |= 0x80 << ((len) % 32);
                    >>> x[(((len + 64) >>> 9) << 4) + 14] = len;[/color]
                    >>
                    >>Maybe you can tell us what mathematical fuctions
                    >>UNIFACE has:[/color][/color]
                    <snip>[color=blue]
                    >here is what is available in UNIFACE proc language
                    >regarding mathematical usage....
                    >
                    >
                    > abs - Return the absolute value of X (|X|).
                    > acos - Return the arc cosine of X.[/color]
                    <snip>[color=blue]
                    > & - logical and
                    > | - logical or
                    > !- logical not[/color]
                    <snip>

                    But does UNIFACE have bitwise operators as MD5 makes extensive use of
                    those. And what number types are available (double precision floats, 32
                    and 64 bit integers)?

                    Many of the bitwiser operators in JavaScript could be substituted with
                    mathematical operations:-

                    var x = y >> 1;

                    - and -

                    var x = Math.floor(y / 2);

                    -would be equivalent so long as y was representable as a positive 32 bit
                    signed integer . Shifting in the other direction might be a bit more
                    problematic.

                    But MD5 uses bitwise OR and XOR extensively and they will be a pain to
                    implement if not natively supported.

                    Richard.


                    Comment

                    • Disco Octopus

                      #11
                      Re: MD5 script

                      in news:bvdig6$1ln $1$8302bc10@new s.demon.co.uk,
                      Richard Cornford typed:[color=blue]
                      > "Disco Octopus" <discooctopusN0 5PAM@yahoo.com> wrote in message
                      > news:xbiSb.366$ KW.20897@news.o ptus.net.au...
                      > <snip>[color=green][color=darkred]
                      >>>> x[len >> 5] |= 0x80 << ((len) % 32);
                      >>>> x[(((len + 64) >>> 9) << 4) + 14] = len;
                      >>>
                      >>> Maybe you can tell us what mathematical fuctions
                      >>> UNIFACE has:[/color][/color]
                      > <snip>[color=green]
                      >> here is what is available in UNIFACE proc language
                      >> regarding mathematical usage....
                      >>
                      >>
                      >> abs - Return the absolute value of X (|X|).
                      >> acos - Return the arc cosine of X.[/color]
                      > <snip>[color=green]
                      >> & - logical and[color=darkred]
                      >>> - logical or[/color]
                      >> !- logical not[/color]
                      > <snip>
                      >
                      > But does UNIFACE have bitwise operators as MD5 makes extensive use of
                      > those. And what number types are available (double precision floats,
                      > 32 and 64 bit integers)?[/color]

                      No. UNIFACE does not have this ability. No bitwise operators.

                      [color=blue]
                      >
                      > Many of the bitwiser operators in JavaScript could be substituted with
                      > mathematical operations:-
                      >
                      > var x = y >> 1;
                      >
                      > - and -
                      >
                      > var x = Math.floor(y / 2);
                      >
                      > -would be equivalent so long as y was representable as a positive 32
                      > bit signed integer . Shifting in the other direction might be a bit
                      > more problematic.
                      >
                      > But MD5 uses bitwise OR and XOR extensively and they will be a pain to
                      > implement if not natively supported.
                      >
                      > Richard.[/color]

                      I think that the only thing that UNIFACE can not handle for this, is bit
                      manipulation. I think this will be the falling over for this thought
                      process.

                      Thanks



                      Comment

                      • Richard Cornford

                        #12
                        Re: MD5 script

                        "Disco Octopus" <discooctopus@y ahoo.com> wrote in message
                        news:uzsSb.221$ %W.7509@nnrp1.o zemail.com.au.. .
                        <snip>[color=blue][color=green]
                        >>But does UNIFACE have bitwise operators as MD5 makes
                        >>extensive use of those. And what number types are
                        >>available (double precision floats, 32 and 64 bit
                        >>integers)?[/color]
                        >
                        >No. UNIFACE does not have this ability. No bitwise
                        >operators.[/color]
                        <snip>[color=blue]
                        >I think that the only thing that UNIFACE can not handle
                        >for this, is bit manipulation. I think this will be the
                        >falling over for this thought process.[/color]

                        You didn't mention what number types it does have. But that probably
                        doesn't matter as UNIFACE doesn't sound suited to the task. You probably
                        still could re-represent the numbers as 32 element arrays of boolean
                        values and re-produce the bitwiser operations as functions that looped
                        through those arrays doing the equivalent logical operations on the
                        corresponding pairs of boolean values and then use a resulting arrays to
                        re-construct numeric results. But the prospect of doing that and then
                        executing it on a CPU that you know could do those same operations
                        directly in a couple of clock cycles does not appeal.

                        Richard.


                        Comment

                        Working...