Julio 30, 2013
aisen
En esta entrada de blog veremos cómo podemos encriptar datos en SQL Server.
Para ello utilizaremos la opción que nos da SQL Server para encriptar datos ENCRYPTBYPASSPHRASE y para su desencripción DECRYPTBYPASSPHRASE.
En este ejemplo crearemos una base de datos con una tabla que tendrá los campos de nombre de usuario y contraseña, crearemos dos procedimientos almacenados el primero para ingresar usuarios (en este procedimiento encriptamos la contraseña) y el otro procedimiento para verificar el usuario (en este procedimiento desencriptamos la contraseña y la verificamos con el parámetro contraseña del procedimiento almacenado).
Esta algoritmo necesita de una clave para encriptar y para desencriptar el dato, en nuestro caso la clave se llamara “password”
Pasos:
- Crear Base de Datos
- Crear Tabla
- Encriptación
- Desencriptación
- Creamos la Base de Datos.
Primero que todo debemos de crear nuestra base de datos, le llamaremos Usuarios.
Create Database Usuarios
- Creamos la Tabla.
Después creamos una tabla llamada Login en la base de datos que acabamos de crear, esta tabla tendrá los campos “Name” (llave primaria de la tabla, de tipo nvarchar(50)) y “Pass” este campo guardara la contraseña encriptada (tipo nvarchar 300)). Debemos de ver que el tipo del campo “Pass” tiene un tamaño de 300, esto porque la encriptacion puede devolvernos un valor variable en su tamaño.
Use Usuarios
Create Table Login
(
Name nvarchar(50) primary key,
Pass nvarchar(300)
)
- Creamos el procedimiento almacenado para ingresar el usuario.
Este procedimiento almacenado será el que ingrese usuarios a la tabla Login, recibe dos parámetros el nombre de usuario y la contraseña. El procedimiento guarda la contraseña encriptada para ello utilizaremos la opción de SQL Server para encriptar datos llamada ENCRYPTBYPASSPHRASE este algoritmo necesita de una clave y el dato a encriptar en nuestro caso la contraseña.
Create Procedure IngresarUsuario
@Name nvarchar(50),
@Pass nvarchar(50)
As
Begin
Insert Into Login
(
Name,
Pass
)
Values
(
@Name,
ENCRYPTBYPASSPHRASE('password', @Pass)
)
End
Go
- Creamos el procedimiento almacenado para verificar el usuario.
Este procedimiento almacenado verificara el usuario, recibe dos parámetros el nombre de usuario y la contraseña además tiene un parámetro de Output (salida) que será True (verdadero) si el usuario se autentifica correctamente caso contrario devuelve False (falso) si la autentificación es errónea. En el procedimiento desencriptamos la contraseña del usuario y verificamos si es igual al parámetro Pass.
Create Procedure LoginUsuario
@Name nvarchar(50),
@Pass nvarchar(50),
@Result bit Output
As
Declare @PassEncode As nvarchar(300)
Declare @PassDecode As nvarchar(50)
Begin
Select @PassEncode = Pass From Login Where Name = @Name
Set @PassDecode = DECRYPTBYPASSPHRASE('password', @PassEncode)
End
Begin
If @PassDecode = @Pass
Set @Result = 1
Else
Set @Result = 0
End
Go
Espero les sea de ayuda