jueves, 1 de septiembre de 2011
Encriptar columna sql server con aspnet
Acá les proporciono un ejemplo de como crear una tabla de usuarios con el campo de Contraseña encriptado, luego veremos desde una pagina aspnet como podemos validar el usuario contra dicha tabla.1.) Crear el master key
/* Crea la key master */
USE northwind
GO
CREATE MASTER KEY ENCRYPTION
BY PASSWORD = 'SQLAuthority'
GO
2.) Crear el certificado de encriptacion
/* Crea certificado de encriptacion */
CREATE CERTIFICATE EncryptTestCert
WITH SUBJECT = 'SQLAuthority'
GO
3.) Crea la Symmetric Key
/* Crea Symmetric Key */
CREATE SYMMETRIC KEY TestTableKey
WITH ALGORITHM = TRIPLE_DES ENCRYPTION
BY CERTIFICATE EncryptTestCert
GO
4.) Crea la tabla
Create Table Usuarios
(
IdUsuario int identity(1,1) primary key,
Usuario varchar(50),
Contrasena VARBINARY(256)
)
5.) Crea store procedure de ingrear usuarios
create proc Ingresa_usuario
(
@Usuario varchar(50),
@Contrasena varchar(50)
)
as
OPEN SYMMETRIC KEY TestTableKey DECRYPTION
BY CERTIFICATE EncryptTestCert
insert into usuarios(Usuario,Contrasena)
values(@Usuario, ENCRYPTBYKEY(KEY_GUID('TestTableKey'),@Contrasena))
5.1) Ingresando usuarios a través del store procedure
/* Ingresando usuarios con el store procedure */
exec Ingresa_usuario 'usuario1','password'
exec Ingresa_usuario 'usuario2','P@ssw0rd'
/* muestra la columna encriptada */
select * from usuarios
/* verificando que las contraseñas estén correctamente almacenadas. */
OPEN SYMMETRIC KEY TestTableKey DECRYPTION
BY CERTIFICATE EncryptTestCert
SELECT Usuario,CONVERT(VARCHAR(50),DECRYPTBYKEY(Contrasena)) AS Contrasena
FROM usuarios
insert into usuarios(Usuario,Contrasena)
6.) Crear store procedure de validar usuarios
create proc Valida_usuario
(
@Usuario varchar(50),
@Contrasena varchar(50)
)
as
OPEN SYMMETRIC KEY TestTableKey DECRYPTION
BY CERTIFICATE EncryptTestCert
SELECT count(*) as Contar
FROM usuarios
where Usuario=@Usuario
and CONVERT(VARCHAR(50),DECRYPTBYKEY(Contrasena))=@Contrasena
CLOSE SYMMETRIC KEY TestTableKey
Ahora en Visual Studio .net crearemos la pagina de validación
Creando pagina de login.
7.) Agregue un pagina con el nombre de Login.aspx (clic en el menu web site new ítem)
8.) En la pagina agregue un control de login a la pagina desde el toolbox.
8.1) Su pagina se mirara así:
8.2) Capture el evento Authenticate del control login1 y agregue el código de autenticación (precione doble clic sobre el control para generar el evento) este evento tendrá el código de autenticar.
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{ }
Validando con Linq to SQL Classes
9) Agregue un contexto haciendo click derecho sobre su proyecto, luego presioné "add item" y luego busque Linq to SQL Classes, agregue un nombre y luego add.
10) Habra su contexto y desde el server explorer arrastre los store procederes realizados en los pasos anteriores( paso 6 y 5), esto crea automáticamente 2 funciones que hacen referencia a los store procedure.
11) Validando usuarios en el evento Authenticate del paso 8.2:
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) { DataClassesDataContext db = new DataClassesDataContext(); var query = db.Valida_usuario(Login1.UserName, Login1.Password).Single(); if (query.contar > 0) { //password correcto System.Web.Security.FormsAuthentication.SetAuthCookie(Login1.UserName, false); Response.Redirect("Default.aspx"); } else { //password incorrecto Login1.FailureText = "Usuario o password incorrecto"; } }
12.) Creando usuarios ( pendiente de terminar)