Ver Mensaje Individual
  #3 (permalink)  
Antiguo 21/05/2008, 14:39
Avatar de Shiryu_Libra
Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 8 meses
Puntos: 88
Respuesta: Crear un DLL para incluirlo en Codigo ASP

Aqui de nuevo

Hace tiempo que mencione que dejaria algo para encriptacion, y para no dejar la palabra empeñada, muestro este pequeño codigo, espero que les sirva

ok, aki vamos :

abriremos un nuevo proyecto, el cual sera un EXE ActiveX como en nuestro ejemplo anterior.

ya una ves iniciado el espacio de trabajo, cambiaremos el nombre de nuestra clase, dejandolo en "ClsEncrypt"

ahora el codigo:
Código HTML:
'Set Encripta = New cEncrypt
'sResultado = Encripta.ConvertirClave(CadenaxDesencriptar, sClave, False)
'False=desencriptar, True =Encriptar
Option Explicit

Public Enum eEncrypt
    eDesencriptar = 0
    eEncriptar = 1
End Enum

Private m_Accion As eEncrypt

' Variable privadas para las propiedades
Private m_sOriginal As String
Private m_sClave As String
Private Const mc_sClave As String = "123456"

' Si se debe devolver error al fallar en la asignación
' por defecto es True
Private m_RaiseError As Boolean

'----------------------------------------
' Clase Inicalizar, RECORDAR MODIFICAR EL VALOR POR DEFECTO
' DE LA CLAVE
'----------------------------------------
Private Sub Class_Initialize()
    ' Por defecto devolver error
    m_RaiseError = True
    ' Clave por defecto
    m_sClave = "Pruebas"
    ' Por defecto se encriptará
    m_Accion = eEncriptar
End Sub


Public Function ConvertirClave(Optional ByVal sOriginal As String = "", _
                                 Optional ByVal sClave As String = "", _
                                 Optional vAccion As Variant) As String
    Dim LenOri As Long
    Dim LenClave As Long
    Dim i As Long, j As Long
    Dim cO As Long, cC As Long
    Dim k As Long
    Dim v As String
   
    ' Si no se especifican los parámetros,
    ' se usarán los valores de las propiedades
    If Len(sOriginal) = 0 Then _
        sOriginal = m_sOriginal
       
    If Len(sClave) = 0 Then _
        sClave = m_sClave
   
    ' Si se especifica el último parámetro,
    If Not IsMissing(vAccion) Then
        ' usar nuestra propiedad para convertir el valor
        Me.Accion = vAccion
    End If
   
    LenOri = Len(sOriginal)
    LenClave = Len(sClave)
   
    v = Space$(LenOri)
    i = 0&
    For j = 1 To LenOri
        i = i + 1
        If i > LenClave Then
             i = 1
        End If
        cO = Asc(Mid$(sOriginal, j, 1))
        cC = Asc(Mid$(sClave, i, 1))
        If m_Accion Then
             k = cO + cC
             If k > 255 Then
                 k = k - 255
             End If
        Else
             k = cO - cC
             If k < 0 Then
                 k = k + 255
             End If
        End If
        Mid$(v, j, 1) = Chr$(k)
    Next
   
    ConvertirClave = v
End Function

Public Function DesEncriptar(Optional ByVal sOriginal As String = "", _
                             Optional ByVal sClave As String = "") As String
    ' Esta es una función que llamará directamente a ConvertirClave
    '
    m_Accion = eDesencriptar
    DesEncriptar = ConvertirClave(sOriginal, sClave)
End Function

Public Function Encriptar(Optional ByVal sOriginal As String = "", _
                             Optional ByVal sClave As String = "") As String
    ' Esta es una función que llamará directamente a ConvertirClave
    '
    m_Accion = eEncriptar
    Encriptar = ConvertirClave(sOriginal, sClave)
End Function

Public Property Get CadenaOriginal() As String
    CadenaOriginal = m_sOriginal
End Property

Public Property Let CadenaOriginal(ByVal NewValue As String)
    ' Sólo asignar si la cadena tiene algún contenido
    If Len(NewValue) Then
        m_sOriginal = NewValue
    Else
        ' Devolver un error, si así se ha indicado
        If m_RaiseError Then
             With Err
                 .Description = "Se debe asignar algún contenido a la cadena a encryptar / desencriptar"
                 .Number = 13
                 .Source = "cEncrypt::CadenaOriginal"
                 .Raise .Number
             End With
        End If
    End If
End Property

Public Property Get Clave() As String
    Clave = m_sClave
End Property

Public Property Let Clave(ByVal NewValue As String)
    ' Sólo asignar si la cadena tiene algún contenido
    If Len(NewValue) Then
        m_sClave = NewValue
    Else
        ' Devolver un error, si así se ha indicado
        If m_RaiseError Then
             With Err
                 .Description = "Se debe asignar algún contenido a la cadena a usar como clave para encriptar / desencriptar"
                 .Number = 13
                 .Source = "cEncrypt::Clave"
                 .Raise .Number
             End With
        Else
             ' Si no, devolver el valor por defecto
             m_sClave = mc_sClave
        End If
    End If
End Property

Public Property Get RaiseError() As Boolean
    RaiseError = m_RaiseError
End Property

Public Property Let RaiseError(ByVal NewValue As Boolean)
    m_RaiseError = NewValue
End Property

Public Property Get Accion() As eEncrypt
    Accion = m_Accion
End Property

Public Property Let Accion(ByVal NewValue As eEncrypt)
    ' Si el valor indicado es 0 será Descencriptar,
    ' si es cualquier otro valor, será encriptar
    ' De esta forma se aceptarán valores boolenos
    If NewValue = 0 Then
        m_Accion = eDesencriptar
    Else
        m_Accion = eEncriptar
    End If
End Property
Nuestro siguiente paso sera guardar el proyecto "ClsEncrypt", esto es meramente circunstancial, ustedes pueden poner el nombre que deseen, asi podran recordarlo mas facilmente

y como en nuestro ejemplo anterior deben registrar el DLL resultante (retomare parte del texto anterior)
Cita:
Ahora, ya una ves que nosotros guardamos el proyecto y renombrado la clase, podemos proceder a generar nuestra DLL, para esto:
Cita:
Cita:
Menu Archivo
"Generar ClsEncrypt.Dll" <---- cambiara dependiendo del nombre de su proyecto
despues les pregunta, en que directorio desean guardarlo, una ves seleccionado todo listo....

Siguiente paso, una ves terminada la compilacion de nuestro DLL, procederemos a realizar la copia a nuestro directorio WEB, y tambien al registro de la misma de la siguiente forma:

Cita:
Cita:
Regsvr32 [/u] [/s] <nombre del fichero>
Por ejemplo:
REGSVR32 c:\windows\system\Dao350.dll
Los parámetros opcionales [/u] [/s] significan lo siguiente:
[/u] - lo utilizamos cuando queremos "desregistrar" una DLL (o un .ocx en vez de registrarlo).
[/s] - modo "silencioso" - no despliega los mensajes durante la operación.
ya realizado este segundo procedimiento, las pruebas de uso
primero:
creamos el objeto que contendra la clase
Cita:
Cita:
set Encripta = server.CreateObject("Encriptar.clsEncriptar")

segundo: parametrizacion del entorno

la funcion consta de la cadena de texto, clave de encriptacion y un valor booleano, similar a esto:

Para encriptar
Cita:
Encripta.ConvertirClave(texto, Clave, True)
y esta para desencriptar
Cita:
Encripta.ConvertirClave(texto, Clave, False)
cabe mencionar que nosotros tenemos por defecto una clave de encriptacion, esto quiere decir, podemos realizar una encriptacion sin necesidad de mandar una clave para este fin, me refiero a esto

Para encriptar
Cita:
Encripta.ConvertirClave(texto, , True)
y esta para desencriptar
Cita:
Encripta.ConvertirClave(texto, , False)
donde miramos la ausencia del segundo parametro (la clave)

Ahora, he aqui un ejemplo de uso en nuestra pagina ASP

Cita:
Cita:
<%'recordar que esta sera nuestra clave de encriptacion
Clave="VB6"

'clave o string a encriptar
text="Prueba Exitosa"

palabra a encriptar es: <%=pass%><br />

encriptada:(<%
TextoEnc = Encripta.ConvertirClave(texto, Clave, True)
response.Write textoenc

%>)<br />

desencriptada:(<%

TextoEnc = Encripta.ConvertirClave(textoenc, Clave, false)
response.Write textoenc

%>)<br />

Ahora utilizando la clave por defecto
<br />

mismo texto:

<br />

encriptada:(<%

TextoEnc = Encripta.ConvertirClave(pass, , True)'encriptar
response.Write textoenc

%>)<br />
la respuesta seria "encriptada:(¦´›»¤‡v‡ž¿µšÅµ‡)"
desencriptada:(<%

TextoEnc = Encripta.ConvertirClave(textoenc, , false)
response.Write textoenc

%>)<br />



espero que les sirva, como guia para que puedan crear sus propios codigos de encriptacion de 2 vias

__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra