#今回学習するのは、別のハッシュ暗号化拡張機能です。ただし、この拡張機能 Mhash は Hash 拡張機能に統合されています。同時に、この拡張機能は現在推奨されていないことに注意してください。ハッシュ暗号化操作を実行するには、ハッシュ拡張機能の関数を直接使用する必要があります。したがって、私たちは今日も学ぶ目的で理解しています。ハッシュ拡張の内容については、以前の記事「PHP ハッシュ情報の概要拡張フレームワーク」を参照してください。
暗号化ハッシュ関数の使用
$hash = mhash(MHASH_MD5, "测试Mhash"); echo $hash, PHP_EOL; echo bin2hex($hash), PHP_EOL; // /�8�><�۠�P4q�j� // 2fcb38e93e3cc8dba09f503471846a9d $hash = hash('md5', "测试Mhash"); echo $hash, PHP_EOL; // 2fcb38e93e3cc8dba09f503471846a9d $hash = mhash(MHASH_MD5, "测试Mhash", 'hmac secret'); echo $hash, PHP_EOL; echo bin2hex($hash), PHP_EOL; // �k�<F�m �OM���� // b86bb83c46b76d09be4f4daf18ebfe85
コードからわかるように、mhash() 関数と hash() の使用は非常に似ています。それらの機能は同じです。ただし、mhash() 関数で暗号化されている内容はそのまま 2 進数であり、これを bin2hex() で 16 進数に変換すると、通常の hash() 関数で暗号化された構造と全く同じであることがわかります。
hmac 暗号化を実行する場合は、キーを 3 番目のパラメータに直接追加するだけです。
サポートされているすべてのアルゴリズム タイプを確認する
もちろん、ハッシュ暗号化と同様に、Mhash 暗号化でもさまざまなアルゴリズムを選択できます。関連する関数を直接使用して、現在の環境でサポートされている暗号化アルゴリズムを確認することもできます。
echo mhash_count(), PHP_EOL; $nr = mhash_count(); // 33 for ($i = 0; $i <= $nr; $i++) { echo sprintf("Hash:%s,块大小为: %d\n", mhash_get_hash_name($i), mhash_get_block_size($i)); } // Hash:CRC32,块大小为: 4 // Hash:MD5,块大小为: 16 // Hash:SHA1,块大小为: 20 // Hash:HAVAL256,块大小为: 32 // Hash:,块大小为: 0 // Hash:RIPEMD160,块大小为: 20 // Hash:,块大小为: 0 // Hash:TIGER,块大小为: 24 // Hash:GOST,块大小为: 32 // Hash:CRC32B,块大小为: 4 // Hash:HAVAL224,块大小为: 28 // Hash:HAVAL192,块大小为: 24 // Hash:HAVAL160,块大小为: 20 // Hash:HAVAL128,块大小为: 16 // Hash:TIGER128,块大小为: 16 // Hash:TIGER160,块大小为: 20 // Hash:MD4,块大小为: 16 // Hash:SHA256,块大小为: 32 // Hash:ADLER32,块大小为: 4 // Hash:SHA224,块大小为: 28 // Hash:SHA512,块大小为: 64 // Hash:SHA384,块大小为: 48 // Hash:WHIRLPOOL,块大小为: 64 // Hash:RIPEMD128,块大小为: 16 // Hash:RIPEMD256,块大小为: 32 // Hash:RIPEMD320,块大小为: 40 // Hash:,块大小为: 0 // Hash:SNEFRU256,块大小为: 32 // Hash:MD2,块大小为: 16 // Hash:FNV132,块大小为: 4 // Hash:FNV1A32,块大小为: 4 // Hash:FNV164,块大小为: 8 // Hash:FNV1A64,块大小为: 8 // Hash:JOAAT,块大小为: 4
PHP には、前のコードで使用した MHASH_MD5 など、これらのアルゴリズムを表す定数も多数提供されています。実際、走査するコンテンツの前に MHASH_ を追加するだけです。サポートされている定数の具体的なリストは公式マニュアルに記載されているため、ここではコピー&ペーストしません。
Salted S2K アルゴリズムはパスワード ダイジェストを生成します
さらに、Mhash は、非常に便利な一連のパスワードを簡単に生成するために使用できる、非常に便利な Salted S2K アルゴリズムも提供します。パスワードはコンテンツを暗号化します。
// OpenPGP 指定的 Salted S2K 算法 $hashPassword = mhash_keygen_s2k(MHASH_SHA1, '我的密码', random_bytes(2), 4); echo $hashPassword, PHP_EOL; echo bin2hex($hashPassword), PHP_EOL; // �-!= // 101ab899
もちろん、このアルゴリズムは比較的安全でもあり、salt パラメータがあり、返されるデータの長さを指定できます。また、バイナリ データも返されます。標準のテキスト コンテンツを保存する必要がある場合は、それを 16 進形式に変換する必要があります。しかし、比較的に言うと、バイナリ コンテンツを直接生成する方が安全だと思います。
概要
関数ごとに異なるアプリケーション シナリオがありますが、実際には、Mhash には特別なアプリケーション シナリオはありません。結局のところ、Hash 拡張機能の関連関数は完全に機能します。機能が置き換えられ、より豊富で使いやすくなりました。古いプロジェクトでこれらの関数が使用されている場合は、再構築を通じて徐々に新しい関数に置き換えることができます。
テスト コード:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202007/source/PHP%E7%9A%84Mhash%E6%89%A9%E5%B1%95%E5%87%BD%E6%95%B0%E7%9A%84%E5%AD%A6%E4%B9%A0.php
推奨学習: php ビデオ チュートリアル