Colabora |
Crear un inputbox personalizadoCon protección de seguridad para evaluación de contraseñasPara Visual Basic 2005 o superior
Fecha: 17/Sep/2008 (16-09-08)
|
IntroducciónHola a todos, voy a explicaros como crear un inputbox (Un formulario que recibe una cadena de texto) para evaluar una contraseña. Este formulario puede emplearse para realizar un login de seguridad (acceso a la aplicación) en los programas que realicemos más adelante.
Creando y configurando el nuevo proyectoLo primero que debemos hacer es crear un nuevo proyecto, para ello cargamos el compilador de Visual Studio 2005/2008 y hacemos clic en la opción nuevo proyecto. Seleccionamos 'Aplicación para Windows' y escribimos el nombre de nuestro proyecto, por ejemplo: "MiLogin"
A continuación se cargará el nuevo proyecto con un formulario inicial (por defecto Form1.vb), pulsamos las teclas Ctrl+Mayús+A, para agregar un nuevo formulario o bien vamos al menú: Proyecto > Agregar WindowsForm. Llamamos al nuevo formulario: inputbox_avz vamos a las propiedades del formulario e indicamos el tamaño adecuado que queremos que tenga, por ejemplo: 340x170. También desactivamos las opciones: MaximizeBox y MinimizeBox (poniendolas a False). La propiedad StarPosition la configuramos como: CenterScreen y FormBorderStyle como: FixedSingle. Por último agregamos dos labels, dos textbox y dos botones, de forma que tendríamos algo así:
Nota: Configurando los objetosLo primero que debemos hacer es dar un nombre significativo a los objetos con los que vamos a interactuar, como son en este ejemplo los dos textbox (cajas de texto) y los dos botones. Por tanto asignamos al textbox superior el nombre de: t_usuario y a la inferior el nombre de: t_contrasena En cuanto a los botones el botón de la izquierda será: b_cancelar y el de la derecha: b_aceptar En la propiedad 'PasswordChar' del textbox: t_contrasena, ponemos de valor: * (un asterisco) Nota: El códigoComenzamos con las declaraciones globales: Private USER As String = "" '' Usuario correcto Private PASSWORD As String = "" '' Contraseña correcta Private MAX_TRIES As Integer = 0 '' Máximo número de intentos (Si es < 1 entonces desactivado) Private CONTADOR As Integer = 1 '' Contador de intentos A continuación asignamos el código de los eventos (Click) de los botones para ello haz doble click en cada botón y luego reemplaza estos códigos en su ubicación correspondiente. Private Sub b_cancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_cancelar.Click '' Me.DialogResult = Windows.Forms.DialogResult.Cancel '' End Sub Private Sub b_aceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_aceptar.Click '' If t_usuario.Text = "" Then MsgBox("Introduce el nombre de usuario", MsgBoxStyle.Exclamation, "Aviso") Else If t_contrasena.Text = "" Then MsgBox("Introduce la contraseña", MsgBoxStyle.Exclamation, "Aviso") Else comprobar_datos() End If End If '' End Sub A continuación declaramos un subprocedimiento llamado 'comprobar_datos' en la que evaluaremos si los datos introducidos son correctos: Private Sub comprobar_datos() '' If t_usuario.Text = decodificar(USER) And t_contrasena.Text = decodificar(PASSWORD) Then '' Los datos son correctos devolvemos ok al formulario invocador Me.DialogResult = Windows.Forms.DialogResult.OK Else '' Los datos son incorrectos If MAX_TRIES > 0 Then MsgBox("Los datos introducidos son incorrectos" & Chr(13) & Chr(13) _ & "Quedan: " & MAX_TRIES - CONTADOR & " intentos", MsgBoxStyle.Critical, "Aviso") Else MsgBox("Los datos introducidos son incorrectos", MsgBoxStyle.Exclamation, "Aviso") End If '' Si el valor de intentos máximos es > 0 entonces controlamos los intentos realizados If MAX_TRIES > 0 Then If CONTADOR = MAX_TRIES Then '' Si el valor del contador es igual al maximo de intentos cerramos el programa Me.DialogResult = Windows.Forms.DialogResult.No Else '' Sino aumentamos el contador CONTADOR += 1 End If End If '' End If '' End Sub En este último fragmento estoy haciendo referencia a una función denominada 'decodificar' que esta incluida en el código completo que encontrarás más abajo. Es una función simple pero útil para codificar cadenas de texto fácilmente. Los valores declarados en mayúsculas son variables globales. Por último y más importante declaramos otro subprocedimiento denominado 'Inicializar' que será el procedimiento al que haremos referencia al realizar la invocación desde el formulario principal del programa. Public Sub Inicializar(ByVal v_user As String, ByVal v_password As String, Optional _ ByVal v_tries As Integer = 0, Optional ByVal titulo As String = "Login de seguridad") '' USER = v_user PASSWORD = v_password MAX_TRIES = v_tries Me.Text = titulo '' End Sub Podríamos decir que este procedimiento equivale a un constructor de una clase ya que es el encargado de inicializar las variables privadas del formulario. Los valores recibidos (todos ellos por valor) son el 'nombre de usuario' que tendrá acceso al sistema, la 'contraseña' que le identificará, y como valores opcionales: un valor indicando el número máximo de intentos antes de cerrar el programa (< 1 se considera desactivado) y por último el título que queremos que tenga la ventana de login, que por defecto será: "Login de seguridad" Ahora vamos de nuevo al formulario principal (Form1) y hacemos doble clic en la barra de titulo del formulario (evento de carga) (Form1_load) e insertamos el siguiente código: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '' Dim FrmSeguridad As New inputbox_avz FrmSeguridad.Inicializar("nMRuMwRAKfuqwT", "47258036", 3) If FrmSeguridad.ShowDialog <> Windows.Forms.DialogResult.OK Then End End If '' End Sub Al llamar al formulario debemos pasarle el usuario y la contraseña codificados esto es así por que lo normal es que los datos los estemos cargando desde un archivo y se encuentre codificados para evitar un acceso indebido. Nosotros estamos pasando los datos directamente desde el formulario principal (Form1) pero aún así han de estar codificados. De esta forma, en este ejemplo: El nombre de usuario: "nMRuMwRAKfuqwT" equivale a "thephoenixprod" y la contraseña "47258036" a "12345678" Codificar los datosComo los datos deben estar codificados incluyo en el ejemplo otro formulario con un codificador con el que obtener los datos a pasar. Nota: ConclusiónComo veréis resulta muy sencillo mejorar la seguridad de nuestro programa con un inputbox así, ahora lo único que debéis hacer es modificar un poco la interfaz, para adecuarlo a vuestro gusto y/o vuestro programa, además podéis hacer que los datos pasados al formulario provengan directamente de un fichero / archivo o incluso pasar datos de varios usuarios en lugar de uno solo. Un saludo a todos y espero que os haya servido este ejemplo. Espacios de nombres usados en el código de este artículo:System.Windows.Forms
|
Lo comentado en este artículo está probado (y funciona) con la siguiente configuración:
El autor se compromete personalmente de que lo expuesto en este artículo es cierto y lo ha comprobado usando la configuración indicada anteriormente.
En cualquier caso, el Guille no se responsabiliza del contenido de este artículo.
Si encuentras alguna errata o fallo en algún link (enlace), por favor comunícalo usando este link:
Gracias.
Código de ejemplo (comprimido): |
Fichero con el código de ejemplo:
PhoenixProd_Inputbox_Personalizado.zip - 72.02 KB
|