Hero

Como encriptar datos en SQL Server

Julio 30, 2013

aisen
SQL

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
  1. Creamos la Base de Datos.

Primero que todo debemos de crear nuestra base de datos, le llamaremos Usuarios.

Create Database Usuarios
  1. 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)
)
  1. 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
  1. 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

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.