ホームページ  >  記事  >  バックエンド開発  >  PHP 暗号化拡張機能 mcrypt の基本的な使い方の詳細な紹介

PHP 暗号化拡張機能 mcrypt の基本的な使い方の詳細な紹介

黄舟
黄舟オリジナル
2017-03-15 17:14:131699ブラウズ

Mcryptは、CBCOFBCFBECBの4つのblocked暗号モードをサポートしています。 libmcrypt-2.4.x 以降とリンクすると、

nOFB グループ モードと stream モードをサポートすることもできます。 以下は、サポートされている暗号化モードとそれに対応する事前定義された定数です。

1. MCRYPT_MODE_ECB (電子コードブック) は、たとえば、他のキーの暗号化に使用できます。 暗号化されるデータ

は短くランダムであるため、このモードの欠点は実際にはプラスの役割を果たします。

2. MCRYPT_MODE_CBC (暗号ブロックチェーン) は、ファイルの暗号化に特に適しています。 ECBと比較すると安全性が大幅に向上しています。

3. MCRYPT_MODE_CFB (暗号フィードバック) は個々のバイトを暗号化するため、バイト ストリームの暗号化に非常に適しています。

4. MCRYPT_MODE_OFB (出力フィードバック、8 ビット) は CFB に似ています。暗号エラーの伝播を許容できないアプリケーションで使用できます。なぜなら

8ビットに従って暗号化されているため、セキュリティ係数が低く、お勧めできません。

5. MCRYPT_MODE_NOFB (出力フィードバック、nbit) は OFB に似ていますが、アルゴリズムによって指定されたグループ化

サイズに従ってデータを暗号化できるため、より安全です。

6. MCRYPT_MODE_STREAM は、「WAKE」や「RC4」などのストリーム暗号アルゴリズムを含む拡張モードです。


<?php
// 获取支持的加密算法
$algos = mcrypt_list_algorithms();
print_r($algos);

// 获取所支持的模式
$modes = mcrypt_list_modes();
print_r($modes);


PHP5.5.0以降廃止され、使用が推奨されなくなったいくつかのメソッド:

mcrypt_cfc()

mcrypt_cfb()

mcrypt_ecb ( )

mcrypt_ofb();


例 1:

<?php
/**
 * 加密
 * @param $plainText 明文数据
 * @param $key 加密key
 */
function encrypt($plainText, $key) {
	$algo = MCRYPT_RIJNDAEL_256; //加密算法
	$ecb = MCRYPT_MODE_ECB; //加密模式
	$keysize = mcrypt_get_key_size($algo, $ecb);
	$key = substr($key, 0, $keysize); //确保key的长度有效
	$ivSize = mcrypt_get_iv_size($algo, $ecb);
	// 参数 2 可选值有:MCRYPT_RAND(系统随机数生成器), MCRYPT_DEV_RANDOM(从 /dev/random 文件读取数据)
	// 和 MCRYPT_DEV_URANDOM(从 /dev/urandom 文件读取数据)。在 Windows 平台,PHP 5.3.0 之前的版本中,仅支持 MCRYPT_RAND。 
	// 请注意,在 PHP 5.6.0 之前的版本中, 此参数的默认值为 MCRYPT_DEV_RANDOM。
	$iv = mcrypt_create_iv($ivSize, MCRYPT_RAND); //从随机源创建初始向量
	$encryptText = mcrypt_encrypt($algo, $key, $plainText, $ecb, $iv);
	return trim(base64_encode($encryptText));
}

/**
 * 解密
 * @param encryptedText 密文数据
 * @param $key 解密key
 */
function decrypt($encryptedText, $key) {
	$algo = MCRYPT_RIJNDAEL_256;
	$ecb = MCRYPT_MODE_ECB;
	$keysize = mcrypt_get_key_size($algo, $ecb);
	$key = substr($key, 0, $keysize); //确保key的长度有效
	$cryptText = base64_decode($encryptedText);
	$ivSize = mcrypt_get_iv_size($algo, $ecb);
	$iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);
	$decryptText = mcrypt_decrypt($algo, $key, $cryptText, $ecb, $iv);
	return trim($decryptText);
}

例 2:

りー

以上がPHP 暗号化拡張機能 mcrypt の基本的な使い方の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。