---
title: "password_hash en PHP: Cómo Hashear Contraseñas con bcrypt"
excerpt: "Cómo usar password_hash en PHP para proteger contraseñas: comparativa con md5/sha1, opciones de cost y salt, y por qué bcrypt sigue siendo el default seguro."
date: "2020-05-14T08:13:57.000Z"
category: "PHP"
seo_title: "password_hash en PHP: Guía con bcrypt, salt y cost (Segura)"
seo_description: "Usa password_hash con PASSWORD_BCRYPT en PHP para proteger contraseñas. Comparativa con md5/sha1, opciones de cost, salt automático y ejemplos de código reales."
author:
  name: "angel cruz"
  picture: "https://angelcruzdevcdn.nyc3.cdn.digitaloceanspaces.com/images/me/angel-cruz.png"
ogImage:
  url: "/images/open-graph/php-opengraph-image.png"
---

![Y U NO HASH PASSWORD?](https://www.drupal.org/files/project-images/_DSC1711.jpg)

Una de las formas más fáciles de crear un hash para las contraseñas usando php es `md5` podemos ver en este ejemplo cómo implementarlo:

```php
md5('password');
```

Esto nos dara como resultado algo asi: 

```php
5f4dcc3b5aa765d61d8327deb882cf99
```

Pero, realmente esto no es muy efectivo.

Usando `password_hash`

Usando la documentación de php nos dice que para usar esta función debemos hacer lo siguiente:

```php
string password_hash ( string $password , integer $algo [, array $options] )
```

### Algoritmos soportados

- PASSWORD\_DEFAULT
- PASSWORD\_BCRYPT

### Opciones soportadas:

- Salt
- Cost

## Como usar `password_hash`

Usando `PASSWORD_DEFAULT`

```php
password_hash('password', PASSWORD_DEFAULT);
```

Esto nos dara como resultado algo asi: 

```php
$2y$10$hdbF9lyKu5sWphXMtDB46eAO0RNYYlSTufwqIvmC6AC7xhC27s2w.
```

Usando `PASSWORD_BCRYPT`

```php
echo password_hash('password', PASSWORD_BCRYPT);
```

Esto nos dara como resultado algo asi: 

```php
$2y$10$U4cpa/joKALEIIZT72K.Ze7s4S2eXTxee4NpnoOgZEZuqwCo1ZCQK
```

Vamos un poco más allá...

Tomando en cuenta lo que nos dice la documentación aún podemos pasarle un tercer parámetro que será un `array` con ciertas caracteristicas:

```php
$options = [
    'cost' => 11,
    'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
```

Y nuestra pequeña función pasa a ser esto:

```php
echo password_hash('password', PASSWORD_BCRYPT, $options);
```

Esto nos dara como resultado algo asi: 

```php
$2y$11$7.RPImGZC4gN/Tf5sInLGeOkqtUirnway.gOEacAdmlOFk.ipPL4m
```

Hay que tener en cuenta que la opción `salt` ya se encuentra `deprecated` en la version 7.0.0 de php por lo cual, recomiendan usar el `salt` que se genera por defecto.

Como podemos ver en los resultados de cada ejemplo hay ciertas cosas que siempre van a ser iguales (en el caso que no cambiemos el valor de `cost`) y esto lo podemos ver en la siguiente imagen:

![Ejemplo de hash password con php](http://php.net/manual/en/images/2a34c7f2e658f6ae74f3869f2aa5886f-crypt-text-rendered.svg)

Espero que esto les sea de utilidad.

Lecturas recomendadas:

[http://php.net/manual/en/function.password-hash.php](http://php.net/manual/en/function.password-hash.php).

---

## Sitemap

Índice completo del sitio: [/sitemap.md](https://angelcruz.dev/sitemap.md)

Canónico HTML: [https://angelcruz.dev/post/hashing-passwords-con-php](https://angelcruz.dev/post/hashing-passwords-con-php)
