17 mar 2012

[SQL] – Encriptar y Desencriptar una cadena en SQL

 

Buen día a todos!. En esta oportunidad se les mostrará el método para encriptar y desencriptar un cadena en SQL con los métodos ENCRYPTBYPASSPHRASE y DECRYPTBYPASSPHRASE. Estos tienen la utilidad de poder encriptar por ejemplo el password de un usuario en nuestra base de datos de manera que al hacerle select * from no se mostrará el password. Para comprobarlo por ustedes mismo pasamos a detallarlo :

  • Creamos una tabla llamada Customer :
   1: CREATE TABLE CUSTOMER(
   2: ID           INT IDENTITY,
   3: NOMBRE       NVARCHAR(50),
   4: APELLIDO     NVARCHAR(50),
   5: NICKNAME     NVARCHAR(50),
   6: PWD          NVARCHAR(MAX),
   7: PRIMARY KEY(ID))


  • En este paso pueden crear un Store Procedure o una simple insercion, pero lo haré mediante un Store Procedure. Y aquí se asignará el método de SQL llamado ENCRYPTBYPASSPHRASE al campo PWD, y verán que coloco una cadena entre comillas simples, eso es una clave que servirá para encriptar, eso lo pueden modificar sin problemas y colocar lo que gusten, pero OJO esa clave si le asignamos al insertar… también deberá ser la misma al momento de desencriptar.



   1: CREATE PROCEDURE SP_SAVE_CUSTOMER
   2: @NOMBRE NVARCHAR(50),
   3: @APELLIDO NVARCHAR(50),
   4: @NICKNAME NVARCHAR(50),
   5: @PWD    NVARCHAR(MAX)
   6: AS
   7: INSERT INTO CUSTOMER(NOMBRE,APELLIDO,NICKNAME,PWD) VALUES (@NOMBRE,@APELLIDO,@NICKNAME,ENCRYPTBYPASSPHRASE('PWD_CUSTOMER',@PWD))


  • Insertamos un dato de prueba mediante el Store Procedure :



   1: SP_SAVE_CUSTOMER 'Ejemplo de Encrypt y Decrypt','En SQL','ejemplosdotnet.blogspot.com','aprendiendo'



  • Hacemos la consulta a la base de datos para comprobar con un simple consulta de selección :



   1: SELECT*FROM CUSTOMER 


  • Y Obtenemos el siguiente resultado :



vemos que en el campo PWD aparece un [], eso significa que esta compuesto por un array de bytes, lo cual nos impide ver el password. Para poder verificar los datos por ejemplo en caso de un logueo necesitamos verificar que el usuario y el password que se ingresa deben ser iguales. Para eso usaremos el método DECRYPTBYPASSPHRASE.



  • Creamos un Store Procedure que muestre el password, aquí usaremos el  DECRYPTBYPASSPHRASE :



   1: CREATE PROCEDURE SP_SHOW_CUSTOMER 
   2: @NICKNAME    NVARCHAR(50),
   3: @PWD        NVARCHAR(MAX)
   4: AS
   5: SELECT ID,NOMBRE,APELLIDO,NICKNAME,CONVERT(NVARCHAR(MAX),DECRYPTBYPASSPHRASE('PWD_CUSTOMER',PWD)) AS PWD FROM CUSTOMER
   6: WHERE NICKNAME = @NICKNAME AND CONVERT(NVARCHAR(MAX),DECRYPTBYPASSPHRASE('PWD_CUSTOMER',PWD)) = @PWD


  • Ejecutamos el Store Procedure :



   1: SP_SHOW_CUSTOMER 'ejemplosdotnet.blogspot.com','aprendiendo'


  • Y obtendremos el siguiente resultado :





Espero les haya sido de mucha utilidad. Saludos!.

0 comentarios:

Publicar un comentario