¿Cómo cifrar datos en un sitio web?
<%
Const privada BITS_TO_A_BYTE = 8
Const privada BYTES_TO_A_WORD = 4
Const privada BITS_TO_A_WORD = 32
Privado m_lOnBits(30)
Privado m_l2Power(30)
Función privada LShift(lValue, iShiftBits)
Si iShiftBits = 0 Entonces
LShift = lValue
Salir de la función
ElseIf iShiftBits = 31 Entonces
Si lValue y 1 entonces
LShift = & ;H80000000
Else
LShift = 0
Finalizar si
Salir de la función
ElseIf iShiftBits < 0 O iShiftBits > 31 Entonces
Err.Raise 6
Fin si
Si (lValue y m_l2Power(31 - iShiftBits)) Entonces
LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(31 - iShiftBits)) Entonces
Err.* m_l2Power(iShiftBits)) o & H80000000
De lo contrario
LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))* m_l2Power(iShiftBits))
Finalizar si
Función final
Función privada RShift(lValue, iShiftBits)
Si iShiftBits = 0 Entonces
RShift = lValue
Función de salida p>
ElseIf iShiftBits = 31 Entonces
Si lValue y &H80000000 Entonces
RShift = 1
Else
RShift = 0
Finalizar si
Salir de la función
ElseIf iShiftBits < 0 o iShiftBits > 31 Entonces
Err.Raise 6
Finalizar si
RShift = (lValue y &H7FFFFFFE) \ m_l2Power(iShiftBits)
Si (lValue y &H80000000) Entonces
RShift = (RShift O (&.H7FFFFFFE) \ m_l2Power(iShiftBits)
Err H40000000 \ m_l;
2Power(iShiftBits - 1)))
Finalizar si
Finalizar función
Función privada RotateLeft(lValue, iShiftBits)
RotateLeft = LShift(lValue, iShiftBits) o RShift(lValue, (32 - iShiftBits))
Función final
Función privada AddUnsigned(lX, lY)
Dim lX4
Dim lY4
Dim lX8
Dim lY8
Dim lResult
lX8 = lX And & ; H80000000
lY8 = lY Y &H80000000
lX4 = lX Y &H40000000
lY4 = lY Y &H40000000
lResultado = (lX y &H3FFFFFFF) + (lY y &H3FFFFFFF)
Si lX4 y lY4 entonces
lResultado = lResultado Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 o lY4 entonces
Si lResult y &H40000000 Entonces
lResult = lResult Xo &HC0000000 Xor lX8 Xor lY8
De lo contrario
lResult = lResult Xor & Xor lX8 Xor lY8
Finalizar si
Else
lResultado = lResultado Xor lX8 Xor lY8
Finalizar si
AddUnsigned = lResult
Función final
Función privada md5_F(x, y, z)
md5_F = (x e y) o (( No x) y z)
Función final
Función privada md5_G(x, y, z)
md5_G = (x y z) o (y y (No z ))
Función final
Función privada md5_H(x, y, z)
md5_H = (x Xor y Xor z)
Función final
Función privada md5_I(x, y, z)
md5_I = (y Xor (x Or (Not z)))
Función final
Sub privado md5_FF(a, b, c. d, x, s, ac).
d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))
a = RotateLeft (a, s)
a = AddUnsigned(a, b)
a = AddUnsigned(a, b)
End Sub
Sub privado md5_GG (a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub
Sub privado md5_HH(a, b , c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned( AddUnsigned(md5_H(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub
Sub privado md5_II(a, b, c, d , x, s,
Sub privada md5_II(a, b, c, d, x, s, ac)
Sub privada md5_II(a, b, c, d, x , s ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac))
a = RotateLeft(a, s )
a = AddUnsigned(a, b)
End Sub
Función privada ConvertToWordArray(sMessage)
Dim lMessageLength
Dim lNumberOfWords
Dim lWordArray()
Dim lBytePosition
DimlByteCount
Dim lWordCount
Const MODULUS_BITS = 512
Const CONGRUENT_BITS = 448
lMessageLength = Len(sMessage)
lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS)))
lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS))))) Mismos bits) (bits a byte))\ (modulus_bits\bits_to_a_byte))+ 1) * (MODULUS_BITS\BITS_TO_A_WORD)
ReDim lWordArray(lNumberOfWords - 1)
lBytePosition = 0
lByteCount = 0
Hacer un
hasta lByteCount > ) O LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)
lByteCount = lByteCount + 1
Bucle
lWordCount = lByteCount \ BYTES_TO_A_WORD
lBytePosition= ( lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) O LShift(&H80, lBytePosition)
lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)
lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)
ConvertToWordArray = lWordArray
Función final
Función privada WordToHex(lValue)
Dim lByte
Dim lCount
Para lCount = 0 a 3
lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) y m_lOnBits(BITS_TO_A_BYTE - 1)
WordToHex = WordToHex &
Siguiente
Función final
Función pública MD5(sMessage)
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)
md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D p>
md5_II b, c, d, a, x(k + 1), S44, & H85845DD1
md5_II a, b, c, d, x(k + 8) , S41 y H6FA87E4F
> md5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0
md5_II c, d, a, b, x(k + 6), S43, & p>
md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1
md5_II a, b, c, d, x(k + 4), S41, & ;HF7537E82
md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235
md5_II c, d, a, b, x(k + 2) , S43 y H2AD7D2BB
md5_II b, c, d, a, x(k + 9), S44 y HEB86D391
a = AddUnsigned(a, AA)
b = AgregarSin firmar(b, BB)
c = AgregarSin firmar(c, CC)
d = AgregarSin firmar(d, DD)
Siguiente
'si tipo=32 entonces
'MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d)) ' 32λ
'else
MD5 = LCase(WordToHex(b) & WordToHex(c)) '16λ
'finalizar si
Función final
%>