Cómo encriptar contraseñas en PHP

Cómo encriptar contraseñas en PHP

Aprende Cómo encriptar contraseñas en PHP, con el siguiente tutorial que se abarca desde cero, se crea la base de datos, y los archivos PHP necesarios para llevar a cabo el proceso.

Este tutorial se registra en vídeo y se diseñó para que sea muy fácil seguirlo paso a paso, también en este post incluye el código subido previamente a GitHub para que lo puedas descargar.

Video Explicativo

Cómo encriptar contraseñas en PHP

Codigo Referenciado en el Video Tutorial

Cómo encriptar contraseñas en PHP

Código de la Base de Datos

El nombre de la base de datos es contrasena, para replicar lo referenciado en el video tutorial puedes importar el código a continuación de la base de datos:

-- phpMyAdmin SQL Dump
-- version 5.2.0
-- https://www.phpmyadmin.net/
--
-- Servidor: 127.0.0.1
-- Tiempo de generación: 20-02-2023 a las 03:56:06
-- Versión del servidor: 10.4.24-MariaDB
-- Versión de PHP: 8.1.6

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
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 utf8mb4 */;

--
-- Base de datos: `contrasena`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `usuario`
--

CREATE TABLE `usuario` (
  `id` int(30) NOT NULL,
  `nombre` text COLLATE utf8_spanish2_ci NOT NULL,
  `correo` text COLLATE utf8_spanish2_ci NOT NULL,
  `password` text COLLATE utf8_spanish2_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci;

--
-- Volcado de datos para la tabla `usuario`
--

INSERT INTO `usuario` (`id`, `nombre`, `correo`, `password`) VALUES
(1, 'Mauricio', 'mail@correo.com', '1234abcd..'),
(2, 'Manuel', 'mmail@correo.com', '4b67deeb9aba04a5b54632ad19934f26'),
(3, 'Pedro', 'pmail@correo.com', '0e2c02b1'),
(4, 'Juan', 'jmail@correo.com', '$2y$10$n7yfj06e7/UW1Y02lZVyv.rkEca/Yd5qFaFFCkeGH7Pwo4OLkZT5y'),
(5, 'Ariel', 'amail@correo.com', '4b67deeb9aba04a5b54632ad19934f26');

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `usuario`
--
ALTER TABLE `usuario`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT de las tablas volcadas
--

--
-- AUTO_INCREMENT de la tabla `usuario`
--
ALTER TABLE `usuario`
  MODIFY `id` int(30) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
COMMIT;

/*!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 */;

Conocimientos Previos

El tutorial empieza asumiendo que sabes que es PHP y MySQL, igualmente que sabes como ejecutar código PHP en tu ordenador, en caso de que aun no sepas como correr código PHP en tu ordenador, te puedes guiar por este tutorial donde explico el proceso:

Como instalar aplicaciones PHP en un servidor local

Tutorial PHP ConfiguroWeb

Si tienes dudas sobre que es PHP y MySQL y te gustaría tener un concomiento a profundidad de este lenguaje, te recomiendo la siguiente lista de reproducción con un Tutorial PHP, hecho en mi canal de Youtube:

Qué significa encriptar una contraseña?

Encriptar es ocultar datos mediante una clave para que no puedan ser interpretados por los que no la tienen. No solo las contraseñas se pueden encriptar, cualquier tipo de dato, por ejemplo Whatsapp, se encripta punto a punto, esto significa que si los datos son interceptados por un servidor intermedio, la información no será legible, está solo sería legible por el primer emisor y el receptor de la información.

En el tutorial se hace referencia a encriptar una contraseña, porque para que una aplicación sea más segura, es recomendable que las contraseñas de los usuarios sean protegidas y de ese modo quienes tienen acceso a las bases de datos de las aplicaciones no sepan exactamente las contraseñas ingresadas.

Tipos de Funciones de Encripción en PHP

Para encriptar contraseñas en PHP puedes utilizar las siguientes funciones:

Encripción en md5

Esta función convierte la cadena que se le ingrese en un código hexadecimal de 32 caracteres, es bastante sencilla de usar, no requiere mayores configuraciones, pero no es recomendable para sistemas que requieran gran seguridad ya que estos códigos se pueden desencriptar.

Más información en el siguiente enlace:

https://www.w3schools.com/php/func_string_md5.asp

Encripción en sha1

Este código genera un código encriptado de 160 bits, de 40 caracteres, es un tipo de encripción más seguro que md5, pero sigue siendo, medianamente inseguro, desencriptable y menos recomendable.

Más información en el siguiente enlace:

https://www.w3schools.com/Php/func_string_sha1.asp

Función hash

La función hash encripta de una lista de algoritmos de encripción que se puede puede ver en el siguiente array:

Array ( [0] => md2 [1] => md4 [2] => md5 [3] => sha1 [4] => sha224 [5] => sha256 [6] => sha384 [7] => sha512/224 [8] => sha512/256 [9] => sha512 [10] => sha3-224 [11] => sha3-256 [12] => sha3-384 [13] => sha3-512 [14] => ripemd128 [15] => ripemd160 [16] => ripemd256 [17] => ripemd320 [18] => whirlpool [19] => tiger128,3 [20] => tiger160,3 [21] => tiger192,3 [22] => tiger128,4 [23] => tiger160,4 [24] => tiger192,4 [25] => snefru [26] => snefru256 [27] => gost [28] => gost-crypto [29] => adler32 [30] => crc32 [31] => crc32b [32] => crc32c [33] => fnv132 [34] => fnv1a32 [35] => fnv164 [36] => fnv1a64 [37] => joaat [38] => murmur3a [39] => murmur3c [40] => murmur3f [41] => xxh32 [42] => xxh64 [43] => xxh3 [44] => xxh128 [45] => haval128,3 [46] => haval160,3 [47] => haval192,3 [48] => haval224,3 [49] => haval256,3 [50] => haval128,4 [51] => haval160,4 [52] => haval192,4 [53] => haval224,4 [54] => haval256,4 [55] => haval128,5 [56] => haval160,5 [57] => haval192,5 [58] => haval224,5 [59] => haval256,5 )

Literalmente puedes utilizar cualquiera de estos algoritmos solo poniendo el nombre como uno de los parámetros de los que necesita la función.

La forma en que trabaja esta función es la siguiente, debes poner dos cadenas de texto, la primera cadena es el nombre del algoritmo de encripción que deseas aplicar, por ejemplo el md4 que se encuentra en la posición 1 del array.

La segunda cadena de texto debe tener los caracteres que vas a encriptar en el vídeo relacionado yo uso la contraseña 1234abcd.. que es la contraseña habitual, tanto de mis programas gratuitos como de mis programas de premium

Un ejemplo podría ser el siguiente:

hash('md4', '1234abcd..')

Más información sobre la función hash en el siguiente enlace:

https://www.php.net/manual/es/function.hash.php

Función password_hash

Esta función utiliza dos parámetros el primero es el texto de la contraseña y el segundo el algoritmo que utilizará, que tienen las siguientes constantes

PASSWORD_DEFAULT que utiliza el algoritmo de bcrypt
PASSWORD_BCRYPT utiliza el algoritmo de CRYPT_BLOWFISH
PASSWORD_ARGON2I utiliza el algoritmo de encripción Argon2i
PASSWORD_ARGON2ID utiliza el algoritmo Argon2id

password_hash es la más robusta y recomendada función de encripción de PHP por que es unidireccional, esto significa que no se puede desencriptar, la cadena de 60 caracteres que genera no se puede desencriptar, en adición esta función soporta que le ingreses tu propio algoritmo de encripción, para hacerla aun más difícil de romper.

Más información sobre password_hash en el siguiente enlace:

https://www.php.net/manual/en/function.password-hash.php

Deja una respuesta

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

configuroweb.com
×
Hola de Nuevo
Abrir chat
¿Qué te interesa?
Selecciona los temas de interés sobre
los que deseas recibir noticias: