Como encriptar datos en SQL Server
En esta entrada de blog veremos cmo podemos encriptar datos en SQL Server.
Para ello utilizaremos la opcin que nos da SQL Server para encriptar datos ENCRYPTBYPASSPHRASE y para su desencripcin
DECRYPTBYPASSPHRASE.
En este ejemplo crearemos una base de datos con una tabla que tendr los campos de nombre de usuario y contrasea, crearemos dos procedimientos
almacenados el primero para ingresar usuarios (en este procedimiento encriptamos la contrasea) y el otro procedimiento para verificar el usuario (en
este procedimiento desencriptamos la contrasea y la verificamos con el parmetro contrasea del procedimiento almacenado).
Este 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
Encriptacin
Desencriptacin
1. Creamos la Base de Datos.
Primero que todo debemos de crear nuestra base de datos, le llamaremos Usuarios.
Create Database Usuarios
2. Creamos la Tabla.
Despus 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 contrasea encriptada (tipo nvarchar 300)). Debemos de ver que el tipo del campo "Pass" tiene
un tamao de 300, esto porque la encriptacion puede devolvernos un valor variable en su tamao.
Use Usuarios
Create Table Login
(
Name nvarchar(50) primary key,
Pass nvarchar(300)
)
3. Creamos el procedimiento almacenado para ingresar el usuario.
Este procedimiento almacenado ser el que ingrese usuarios a la tabla Login, recibe dos parmetros el nombre de usuario y la contrasea. El
procedimiento guarda la contrasea encriptada para ello utilizaremos la opcin de SQL Server para encriptar datos llamada
ENCRYPTBYPASSPHRASE este algoritmo necesita de una clave y el dato a encriptar en nuestro caso la contrasea.
Create Procedure IngresarUsuario
@Name nvarchar(50),
@Pass nvarchar(50)
As
Begin
Insert Into Login
(
Name,
Pass
)
Values
(
@Name,
ENCRYPTBYPASSPHRASE('password', @Pass)
)
End
Go
4. Creamos el procedimiento almacenado para verificar el usuario.
Este procedimiento almacenado verificara el usuario, recibe dos parmetros el nombre de usuario y la contrasea adems tiene un parmetro de
Output (salida) que ser True (verdadero) si el usuario se autentifica correctamente caso contrario devuelve False (falso) si la autentificacin es
errnea. En el procedimiento desencriptamos la contrasea del usuario y verificamos si es igual al parmetro 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