Hashes Criptográficos MD5 y SHA-256 con ASP clásico

Código ASP clásico
  • Por CoreASP /
  • 25/10/2025 @ 20:31:48  /
  • 1009 visitas

¿Qué es un Hash Criptográfico?

Imagina que tienes una máquina mágica que puede convertir cualquier texto -ya sea una contraseña, un documento o un mensaje- en una huella digital única de longitud fija. Eso es exactamente un hash criptográfico.

Características principales:

  • Determinista: Misma entrada = mismo hash siempre

  • Irreversible: No puedes obtener el original desde el hash

  • Único: Cambio mínimo = hash completamente diferente

  • Longitud fija: 64 caracteres (SHA-256) sin importar el tamaño del input

¿Para qué sirve en seguridad web?

1. Protección de Contraseñas


' Ejemplo real: cómo se almacenan contraseñas seguras
hash_usuario = GeneratePasswordHash("miClave123")
' Se guarda "e7cf3ef4f17c3999a94f2c6f612e8a888e5b1026878e4e19398b23..."
' ¡No la contraseña original!

2. Verificación de Integridad


' Verificar si un archivo no ha sido modificado
hash_original = "a1b2c3d4e5f6..."
hash_actual = GeneratePasswordHash(contenido_archivo)
If hash_actual = hash_original Then
    Response.Write "Archivo intacto"
Else
    Response.Write "Archivo modificado"
End If

3. Firmas Digitales


' Crear huella única de documentos
hash_documento = GeneratePasswordHash(documento_importante)
' Este hash puede ser firmado digitalmente


Aplicaciones prácticas para un sitio web

Protección de usuarios:


' Cuando usuario se registra:
hash_password = GeneratePasswordHash(nueva_contraseña)
' Guardas el hash en la base de datos, NO la contraseña
' Cuando usuario inicia sesión:
hash_ingresado = GeneratePasswordHash(contraseña_ingresada)
If hash_ingresado = hash_guardado_en_BD Then
    ' Acceso concedido
End If


Consejo para implementar:


' Siempre usa salt para mayor seguridad
Function HashSeguroParaBlog(password)
    salt = "tu_blog_salt_unico_2024"
    hash_seguro = GeneratePasswordHash(password & salt)
    Return hash_seguro
End Function



Función SHA-256

<%
' Función para generar hash SHA-256 de una cadena
Function GeneratePasswordHash(password)
    ' Crear objeto para calcular hash
    Dim asc, hash, bytes
    Set asc = CreateObject("System.Text.UTF8Encoding")
    Set hash = CreateObject("System.Security.Cryptography.SHA256Managed")
    
    ' Convertir la contraseña a bytes UTF-8
    bytes = asc.GetBytes_4(password)
    
    ' Calcular el hash
    bytes = hash.ComputeHash_2((bytes))
    
    ' Convertir bytes a cadena hexadecimal
    Dim hexStr, i, b
    hexStr = ""
    For i = 1 To LenB(bytes)
        b = AscB(MidB(bytes, i, 1))
        If b < 16 Then
            hexStr = hexStr & "0"
        End If
        hexStr = hexStr & Hex(b)
    Next
    
    GeneratePasswordHash = LCase(hexStr)
    
    ' Limpiar objetos
    Set hash = Nothing
    Set asc = Nothing
End Function

' Ejemplo de uso:
Dim password, hashedPassword
password = "miContraseñaSegura123"
hashedPassword = GeneratePasswordHash(password)
Response.Write "Contraseña original: " & password & "
"
Response.Write "Hash SHA-256: " & hashedPassword & "
"
%>

Función MD5

<%
' Función para generar hash MD5 de una cadena
Function MD5Hash(text)
    Dim MD5
    Set MD5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
    
    Dim bytes, out, i, b
    bytes = UTF8Encode(text)
    bytes = MD5.ComputeHash_2((bytes))
    
    out = ""
    For i = 1 To LenB(bytes)
        b = AscB(MidB(bytes, i, 1))
        out = out & LCase(Right("0" & Hex(b), 2))
    Next
    
    MD5Hash = out
    
    ' Limpiar objeto
    Set MD5 = Nothing
End Function

Function UTF8Encode(text)
    Dim UTF8
    Set UTF8 = CreateObject("System.Text.UTF8Encoding")
    UTF8Encode = UTF8.GetBytes_4(text)
    Set UTF8 = Nothing
End Function

' Ejemplo de uso
Dim passwordUsuario, passwordHash
passwordUsuario = "miPassword123"
passwordHash = MD5Hash(passwordUsuario)
Response.Write ""
Response.Write "Texto original: " & passwordUsuario & "
"
Response.Write "Hash MD5: " & passwordHash & "

"
%>






tags:

En esta sección encontrarás una mezcla de códigos recopilados de fuentes públicas de Internet y otros creados por CoreASP. Estos recursos se comparten de buena fe con el único objetivo de servir como base de conocimiento en el desarrollo de aplicaciones en ASP Clásico. CoreASP no garantiza la precisión, vigencia ni funcionamiento de los artículos o fragmentos de código publicados, y no se hace responsable por el uso que se les dé. Se recomienda siempre revisar, adaptar y probar el código antes de implementarlo en entornos de producción.