En ASP, hemos utilizado la función MD5 en ASP utilizada por el foro Rudong.com, etc. La cadena cifrada por la función MD5 es la siguiente:
1165d25d8cd021d5
Y en Asp.Net el siguiente método:
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(contraseña.Texto,"MD5")
El resultado del cifrado MD5 es:
12C403B91165D25D8CD021D5F9B5BB7F
La razón es que la función MD5 en ASP utiliza los bits 9 al 25 del valor Hash MD5 de 32 bits y luego lo cambia a minúsculas como texto cifrado. Sabiendo esto, los resultados de ASP.NET se pueden utilizar para comparar cadenas de contraseñas en bases de datos más antiguas con un poco de procesamiento.
En la función MD5 de ASP, líneas 353 y 354:
'MD5 = LCase(PalabraAHex(a) & PalabraAHex(b) & PalabraAHex(c) & PalabraAHex(d))
MD5=LCase(WordToHex(b) & WordToHex(c)) 'Recorté esto para que se ajuste a la contraseña de la base de datos de 16 bytes :D
La primera oración es tomar todo el texto cifrado de 32 bits y la segunda oración es tomar los bits del 9 al 25 en el medio como texto cifrado de 16 bits.
Cuando se trata de vb.net, el problema vuelve a aparecer. En vb.net, el espacio de nombres System.Web.Security no se puede utilizar y el método simple anterior no se puede utilizar para el cifrado MD5. Entonces escribí la siguiente función para manejarlo:
VB.NET:
'Función de cifrado MD5
Función pública compartida MD5 (ByVal strSource como cadena, código ByVal como Int16) como cadena
'Aquí se utiliza el texto original de la contraseña codificada en ascii. Si desea utilizar caracteres chinos como contraseña, puede utilizar UnicodeEncoding, pero será incompatible con la función MD5 en ASP.
Dim dataToHash As Byte() = (New System.Text.ASCIIEncoding).GetBytes(strSource)
Valor hash tenue As Byte() = CType(System.Security.Cryptography.CryptoConfig.CreateFromName("MD5"), System.Security.Cryptography.HashAlgorithm).ComputeHash(dataToHash)
Atenuar i como entero
Seleccionar código de caso
Caso 16 'Seleccione el resultado del cifrado de caracteres de 16 bits
Para i = 4 a 11
MD5 += Hex(valor hash(i)).ToLower
Próximo
Caso 32 'Seleccione el resultado del cifrado de caracteres de 32 bits
Para i = 0 a 15
MD5 += Hex(valor hash(i)).ToLower
Próximo
Case Else 'Cuando el código es incorrecto, devuelve la cadena completa, es decir, caracteres de 32 bits
Para i = 0 Para valor hash. Longitud - 1
MD5 += Hex(valor hash(i)).ToLower
Próximo
Finalizar selección
de función final
: AndyDavis BLOG