ホームページ  >  記事  >  バックエンド開発  >  Php Aes暗号化プログラムのコード共有_PHPチュートリアル

Php Aes暗号化プログラムのコード共有_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:47:451104ブラウズ

今日は Php Aes 暗号化プログラムとは関係ありませんでした。これは Yii フレームワークで使用されていない場合は、Yii::app()->params['encryptKey'] を置き換えるだけです。コードを対応するデフォルトのキーに置き換えます。

AES 暗号化アルゴリズム – アルゴリズム原理

AES アルゴリズムは、順列と順列演算に基づいています。順列はデータの再配置であり、順列はあるデータ単位を別のデータ単位に置き換えることです。 AES は、いくつかの異なる方法を使用して、置換および順列操作を実行します。
AES は、128、192、および 256 ビットのキーを使用し、128 ビット (16 バイト) ブロックでデータを暗号化および復号化できる、反復的な対称キー ブロック暗号です。キーのペアを使用する公開キー暗号とは異なり、対称キー暗号は同じキーを使用してデータの暗号化と復号化を行います。ブロック暗号によって返される暗号化データは、入力データと同じビット数を持ちます。反復暗号化では、入力データの並べ替えと置換を繰り返すループ構造が使用されます。

コードは次のとおりです コードをコピー

/**
* php AES暗号化および復号化クラス
* Java は 128 ビット暗号化のみをサポートしているため、PHP も 128 ビット暗号化を使用しており、Java に変換できます。
※同時にAES規格も128ビットとなります。 RIJNDAEL アルゴリズムのみが 128、192、および 256 ビット暗号化をサポートできます。
*
* @著者テリー
*
*/
クラスPhpAes
{
/**
* これは AES-128 / CBC / ZeroBytePadding で暗号化されました。
* Base64_encode 文字列を返す
* @著者テリー
* @param string $plaintext
* @param string $key
*/
パブリック静的関数 AesEncrypt($plaintext,$key = null)
{
if ($plaintext == '') return '';
if(!extension_loaded('mcrypt'))
throw new CException(Yii::t('yii','AesEncrypt では、データ暗号化機能を使用するには PHP mcrypt 拡張機能をロードする必要があります。'));
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$plaintext = self::PKCS5Padding($plaintext, $size);
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$key=self::substr($key===null ? Yii::app()->params['encryptKey'] : $key, 0, mcrypt_enc_get_key_size($module));
/* IV を作成し、MCRYPT_RAND を使用してキーサイズの長さを決定します
* 代わりに Windows 上で */
$iv = substr(md5($key),0,mcrypt_enc_get_iv_size($module));
/* 暗号化を初期化します */
mcrypt_generic_init($module, $key, $iv);

/* データを暗号化します */
$encrypted = mcrypt_generic($module, $plaintext);

/* 暗号化ハンドラーを終了します */
mcrypt_generic_deinit($module);
mcrypt_module_close($module);
returnbase64_encode(trim($encrypted));
}

/**
* これは AES-128 / CBC / ZeroBytePadding で復号化されました。
* @著者テリー
* @param string $encryptedbase64_encode 暗号化文字列
* @param string $key
* @throws CException
* @戻り文字列
*/
パブリック静的関数 AesDecrypt($encrypted, $key = null)
{
if ($encrypted == '') return '';
if(!extension_loaded('mcrypt'))
throw new CException(Yii::t('yii','AesDecrypt では、データ暗号化機能を使用するには PHP mcrypt 拡張機能をロードする必要があります。'));

$ciphertext_dec = Base64_decode($encrypted);
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$key=self::substr($key===null ? Yii::app()->params['encryptKey'] : $key, 0, mcrypt_enc_get_key_size($module));

$iv = substr(md5($key),0,mcrypt_enc_get_iv_size($module));

/* 復号化のために暗号化モジュールを初期化します */
mcrypt_generic_init($module, $key, $iv);

/* 暗号化された文字列を復号化します */
$decrypted = mdecrypt_generic($module, $ciphertext_dec);

/* 復号化ハンドルを終了し、モジュールを閉じる */
mcrypt_generic_deinit($module);
mcrypt_module_close($module);
return self::UnPKCS5Padding($decrypted);
}


プライベート静的関数 strlen($string)
{
extension_loaded('mbstring') を返します mb_strlen($string,'8bit') : strlen($string);
}

プライベート静的関数substr($string,$start,$length)
{
return extension_loaded('mbstring') ? mb_substr($string,$start,$length,'8bit') : substr($string,$start,$length);
}

プライベート静的関数 PKCS5Padding ($text, $blocksize) {
$pad = $blocksize - (self::strlen($text) % $blocksize);
$text を返します (chr($pad), $pad);
}

プライベート静的関数 UnPKCS5Padding($text)
{
$pad = ord($text{self::strlen($text)-1});
if ($pad > self::strlen($text)) return false;
if (strspn($text, chr($pad), self::strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -1 * $pad);
}
}

使用方法

コードは次のとおりです コードをコピー

require_once('./AES.php');
//$aes = 新しい AES();
$aes = new AES(true); // 暗号化された文字列を 16 進形式で保存します
//$aes = new AES(true,true);//デバッグ情報を含み、暗号化された文字列は 16 進数で保存されます
$key = "これは 32 バイトのキーです";//キー
$keys = $aes->makeKey($key);
$encode = "123456" // 暗号化された文字列
; $ct = $aes->encryptString($encode, $keys);
echo "encode = ".$ct."
";
$cpt = $aes->decryptString($ct, $keys);
echo "decode = ".$cpt;
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632843.html技術記事今日は、Php Aes 暗号化プログラムとは何の関係もありませんでした。拡張子が Yii に適していて、Yii フレームワークで使用されていない場合は、コード内の Yii::app()->params['encryptKey'] を実際のものに置き換えるだけです。対応するデフォルトキー ..
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。