3 Ejercicios Para Encriptar y Desencriptar Datos en MySQL
Ver este artículo en el blog
Google+
@tuprimeraweb
3 Ejercicios Para Encriptar y Desencriptar Datos en MySQL
Empezaremos con este post con el primero de tres ejercicios que consistirán en:
1. La base de datos y un formulario para guardar claves encriptadas (en este
artículo)
2. Un formulario para validar los datos de un visitante
3.Un formulario de emergencia para os usuarios que olvidaron su contraseña
personal
Si deseas recibir las siguientes publicaciones en tu bandeja de correo anótate en el
formulario a la derecha “Suscripción por correo electrónico”, o también podrías sindicar
este blog con la
dirección de nuestros feed
.
El ejercicio esta preparado para quienes tengan conocimientos
intermedios de PHP
(base de datos), del uso de
phpMyAdmin
y HTML5, trataré de mantener la explicación
lo más sencilla posible.
La base de datos
Ingresamos a phpMyAdmin para diseñar nuestra base de datos (la nombraré ‘
datos
’),
para no complicarnos el ejercicio y centrarnos en lo que nos interesa agregamos la
tabla ‘
usuarios
’ con la siguiente estructura (5 campos):
Campo
Atributos
idusuario entero, PK, auto_incremental nombres varchar de 50 caracteres (en realidad pediremos
nombre y apellido)
nick varchar de 50 caracteres, índice único (para
impedir dos usuarios con el mismo alias)
clave varchar de 50 caracteres
clavex longtext (es para guardar la clave encriptada)
Una vista de mi phpMyAdmin:
Pág. 1
Ver este artículo en el blog
Google+
@tuprimeraweb Y para quienes prefieren insertar instrucciones de comando a continuación las líneas
del script al generar un backup de la BD:
phpMyAdmin SQL Dump
version 3.5.1
http://www.phpmyadmin.net
Servidor: localhost
Tiempo de generación: 05102013 a las 10:49:13
Versión del servidor: 5.5.24log
Versión de PHP: 5.3.13
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET
@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET
@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
Base de datos: `datos`
Estructura de tabla para la tabla `usuarios` CREATE TABLE IF NOT EXISTS `usuarios` (
`idusuario` int(11) NOT NULL AUTO_INCREMENT,
`nombres` varchar(50) NOT NULL,
`nick` varchar(50) NOT NULL,
`clave` varchar(50) NOT NULL,
`clavex` longtext NOT NULL,
PRIMARY KEY (`idusuario`),
UNIQUE KEY `nick` (`nick`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
/*!40101 SET
CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET
COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Sobre la encriptación de cadenas
No voy a extenderme en este punto sobre el que hay mucha y diversa información, me
basaré en el sitio en español de
PHP.net
sobre
funciones de hash
, y de forma
particular usaré la función
hash_hmac(), posiblemente alguién me corrija sobre una
mejor opción y saldré ganando
.
¿Cómo saber si tu servidor soporta esta u otras cadenas hash? Carga phpinfo(), si no
hay un acceso rápido crea una página en tu servidor con extensión php:
Pág. 2
Ver este artículo en el blog
Google+
@tuprimeraweb
Carga esta página en tu navegador y busca la cadena ‘hash’, creo que todos los navegadores reconocen la combinación Ctrl + F, encontrarás este bloque:
La primera fila está en ‘enabled’ y significa que si soporta hash, la segunda fila muestra
todas las funciones hash que están soportadas.
La función hash_hmac() requiere al menos de 3 parámetros (tipo cadena) en este
orden:
1. El algoritmo de cifrado que se va a usar, usaré en este ejercicio sha512, que en ...
Regístrate para leer el documento completo.