Ver Mensaje Individual
  #25 (permalink)  
Antiguo 06/10/2007, 18:02
Avatar de u_goldman
u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años
Puntos: 98
Re: Un módulo de usuarios

Código:
<%
Class encriptar
	' Derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm,
	' as set out in the memo RFC1321.
	'
	'
	' ASP VBScript code for generating an MD5 'digest' or 'signature' of a string. The
	' MD5 algorithm is one of the industry standard methods for generating digital
	' signatures. It is generically known as a digest, digital signature, one-way
	' encryption, hash or checksum algorithm. A common use for MD5 is for password
	' encryption as it is one-way in nature, that does not mean that your passwords
	' are not free from a dictionary attack.
	'
	' This is 'free' software with the following restrictions:
	'
	' You may not redistribute this code as a 'sample' or 'demo'. However, you are free
	' to use the source code in your own code, but you may not claim that you created
	' the sample code. It is expressly forbidden to sell or profit from this source code
	' other than by the knowledge gained or the enhanced value added by your own code.
	'
	' Use of this software is also done so at your own risk. The code is supplied as
	' is without warranty or guarantee of any kind.
	'
	' Should you wish to commission some derivative work based on this code provided
	' here, or any consultancy work, please do not hesitate to contact us.
	'
	' Web Site:  http://www.frez.co.uk
	' E-mail:    [email protected]

	private BITS_TO_A_BYTE
	private BYTES_TO_A_WORD
	private BITS_TO_A_WORD
	Private m_lOnBits(30)
	Private m_l2Power(30)

	private sub class_Initialize()

		BITS_TO_A_BYTE = 8
		BYTES_TO_A_WORD = 4
		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)
	end sub


	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(iShiftBits)) Or &H80000000
	    Else
	        LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))
	    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(iShiftBits)

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

	Private Function RotateLeft(lValue, iShiftBits)
	    RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits))
	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 F(x, y, z)
	    F = (x And y) Or ((Not x) And z)
	End Function

	Private Function G(x, y, z)
	    G = (x And z) Or (y And (Not z))
	End Function

	Private Function H(x, y, z)
	    H = (x Xor y Xor z)
	End Function

	Private Function I(x, y, z)
	    I = (y Xor (x Or (Not z)))
	End Function

	Private Sub FF(a, b, c, d, x, s, ac)
	    a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac))
	    a = RotateLeft(a, s)
	    a = AddUnsigned(a, b)
	End Sub

	Private Sub GG(a, b, c, d, x, s, ac)
	    a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac))
	    a = RotateLeft(a, s)
	    a = AddUnsigned(a, b)
	End Sub

	Private Sub HH(a, b, c, d, x, s, ac)
	    a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac))
	    a = RotateLeft(a, s)
	    a = AddUnsigned(a, b)
	End Sub

	Private Sub II(a, b, c, d, x, s, ac)
	    a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac))
	    a = RotateLeft(a, s)
	    a = AddUnsigned(a, b)
	End Sub

	Private Function ConvertToWordArray(sMessage)
	    Dim lMessageLength
	    Dim lNumberOfWords
	    Dim lWordArray()
	    Dim lBytePosition
	    Dim lByteCount
	    Dim lWordCount
	    
	    Const MODULUS_BITS = 512
	    Const CONGRUENT_BITS = 448
	    
	    lMessageLength = Len(sMessage)
	    
	    lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)
	    ReDim lWordArray(lNumberOfWords - 1)
	    
	    lBytePosition = 0
	    lByteCount = 0
	    Do Until lByteCount >= lMessageLength
	        lWordCount = lByteCount \ BYTES_TO_A_WORD
	        lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
	        lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)
	        lByteCount = lByteCount + 1
	    Loop

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

	    lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)

	    lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)
	    lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)
	    
	    ConvertToWordArray = lWordArray
	End Function

	Private Function WordToHex(lValue)
	    Dim lByte
	    Dim lCount
	    
	    For lCount = 0 To 3
	        lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)
	        WordToHex = WordToHex & Right("0" & Hex(lByte), 2)
	    Next
	End Function
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway