markdown [php:hash]在PHP上生成哈希。 #php #security

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown [php:hash]在PHP上生成哈希。 #php #security相关的知识,希望对你有一定的参考价值。

## OVERVIEW
[hash()](http://php.net/manual/ja/function.hash.php) で生成する HASH アルゴリズムの特徴について。

### References.
- [Hash関数まとめ(md5, sha1, sha2, crc32, PBKDF2)](http://kimihiro-n.appspot.com/show/5889981516087296)
  - md5: bit128 / 32桁 / もはや脆弱でパスワードハッシュに不適当
  - sha1: bit160 / 40桁 ソルト付きなら PW ハッシュ OK みたい → 近年 sha2 への移行勧告あり
  - sha256: bit256 / 64桁 / sha2 の一種、最近はこっちに主流が移りつつある
  - sha512: bit512 / 128桁 / sha2 の一種で 64 bit CPU を想定して作られている
  - PBKDF2: sha2 系の重ね掛けアルゴリズムでセキュアめみたい
- [Random PW Generator](http://www.sethcardoza.com/tools/random-password-generator/)

### Sample code.
#### とりあえずハッシュ作りたい
```php
echo md5(uniqid(mt_rand(), true)).PHP_EOL;
// e0d0e5b3e962afdc6c6f6488c17c537b

echo sha1(uniqid(mt_rand(), true)).PHP_EOL;
// 260de8f45b0e471714f71531ddf7b121e3968fd1

echo hash('sha256', uniqid(mt_rand())).PHP_EOL;
// 2bd0ee8b10042b56018e734548e1b508bff197d0e22a068ede55af252bebf7c5
```

#### パスワードのハッシュにはソルト必須?
アルゴリズムを変えたところで **ハッシュは総当たりでクラックされる可能性がある** 。どのアルゴリズムも **平文パスワードを純粋にハッシュするだけでは脆弱** なので、元のデータにデータを追加する「ソルト」付けや、このソルト生成にハッシュを組み合わせる「ソルトアンドペッパー」を行うのが定石とされる。(まぁほとんどフレームワーク側で担保してるけどね)

```php
$password = 'this1sPassW0rd';
$salt     = 'SecuritySalt';
$pepper   = hash('SHA256', 'AndPepper');
$hashedPw = hash('SHA256', $pepper.$password.$salt); 
```

以上是关于markdown [php:hash]在PHP上生成哈希。 #php #security的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中使用 FPDI 在页面上生成多个 pdf

php背景图片上生成二维码,二维码上带图片示例代码

markdown 如何在PHP 7.1和PHP 5.6之间的Laravel Valet中切换PHP版本

PHP的Hash信息摘要扩展框架

PHP的Hash信息摘要扩展框架

PHP使用hash_algos函数计算哈希值,之间的性能排序