¿Qué es el cifrado de datos?

El cifrado y descifrado de datos es la base principal de la seguridad de los datos que almacenamos en nuestra base de datos es recomendable cifrar aquellos datos sensibles. Esto consiste en transformar un texto plano y legible en otro texto codificado. Dentro del cifrado vamos a distinguir 2 tipos

Cifrado reversible: Permite pasar del texto codificado al original. Lo utilizaremos para cifrar los datos sensibles.

Cifrado no reversible o hash: También llamado hash, este cifrado codifica los datos de manera que no es posible volver al texto original. Lo utilizaremos para cifrar las contraseñas, ya que si partimos del mismo texto y aplicamos el mismo cifrado obtendremos la misma secuencia de caracteres.

Desarrollo del proyecto

Estructura en la base de datos

Para almacenar los datos utilizaremos una tabla en base de datos en SQL Server con los siguientes campos:

Tabla en la base de datos

En esta tabla los datos sensibles serán el correo y la contraseña.

Correo: Lo cifraremos de manera reversible para poder recuperar su valor posteriormente

Contraseña: Puesto que sólo necesitaremos saber si la contraseña es igual a la que nos introduzca el usuario la cifraremos de manera no reversible.

Proyecto MVC

NuGets necesarios

Para mapear la base de datos y poder realizar consultas LinQ necesitaremos Microsoft.EntityFrameworkCore.

Microsoft.EntityFrameworkCore

Para conectarnos a la base de datos necesitaremos Microsoft.EntityFramework.SqlServer.

Para conectarnos a la base de datos necesitaremos Microsoft.EntityFramework.SqlServer.

Models

Puesto que vamos a utilizar un solo tipo de objetos, crearemos el model correspondiente y lo mapeamos con la tabla de la base de datos.

Models/User.cs

Context

El contexto de la aplicación consistirá en un DbSet que contiene la lista de los usuarios mapeados de la base de datos.

Data/UsersContext.cs

HelperCryptography

Para ofrecer un código más claro las funcionalidades del cifrado las añadiremos a un helper localizado en la carpeta Helpers. Tendrá las siguientes funciones:

GenerateSalt: Función que devuelve una secuencia de 27 letras en mayúsculas que junto con la clave secreta sumarán los 32 caracteres necesarios para cifrar el texto.

GenerateSalt

CompareArrays: Función que recibe 2 vectores y devuelve true si son exactamente iguales y false si son diferentes.

CompareArrays

EncriptarPassword: Función que recibe 2 cadenas de caracteres, la contraseña y el salt y retorna un array de byes cifrados correspondiente al hash.

EncriptarPassword

EncryptString: Función que recibe un texto a cifrar de manera reversible, un salt que añadir a la clave de cifrado y la clave «2post» con la cual la cifraremos y retorna el texto cifrado.

EncryptString

DecryptString: Función contraria a la anterior. Recibe un texto cifrado y el salt con el que se cifró para posteriormente añadir la clave secreta y así devolver el texto sin cifrar.

DecryptString

Repositories

Para gestionar todos los usuarios de la base de datos utilizaremos un repositorio al cual le añadiremos las funcionalidades correspondientes.

GetUsers: Devuelve todos los datos de los usuarios de la base de datos y descifra el correo para retornarlo de una manera legible.

GetUsers

RegisterUser: Metodo que recibe los datos del usuario a registrar en la base de datos y los cifra de manera correspondiente

RegisterUser

Controllers

Sólo vamos a implementar un controlador, se encargará de mostrar el listado de los usuarios con la información legible y ofrecer el formulario para la creación de un usuario.

Controllers/HomeController.cs

Vistas

Las vistas son básicas, un listado de User utilizando scaffolding y un formulario con campos de texto para mandar los datos a almacenar a la base de datos.

Resultado

Datos almacenados en la base de datos.

Los datos sensibles almacenados en los campos de la base de datos se encuentran cifrados. El email y la contraseña son ilegibles.

Datos en la base de datos

Datos mostrados en la aplicación

En la aplicación la contraseña tampoco es legible por el correo está en texto plano.

Datos en la aplicación

Autor/a: Sergio de San Clemente Muñoz

Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma

Centro: Tajamar

Año académico: 2021-2022

Código: GitHub

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.