PHP aes算法
- function aes128cbcEncrypt($key, $text)
- {
- /**
- * 暗号を開く
- */
- $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
- if (! $td)
- {
- throw new GeneralSecurityException('Invalid mcrypt cipher, check your libmcrypt library and php-mcrypt extension');
- }
- // Windows には /dev/rand がないため、MCRYPT_DEV_RANDOM を MCRYPT_RAND に置き換えました :)
- srand((double)microtime () * 1000000);
- $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
- /**
- * 暗号化を初期化します
- */
- mcrypt_generic_init($td, $key, $iv);
- /**
- * データを暗号化します
- */
- $encrypted = mcrypt_generic($td, $text);
- /**
- * 暗号化ハンドラーを終了します
- */
- mcrypt_generic_deinit($td);
- /**
- * AES-128-CBC 暗号化。 IV は、暗号文の最初の 16 バイト
- * として返されます。
- */
- return $iv 。 $encrypted;
- }
-
- function aes128cbcDecrypt($key, $encrypted_text)
- {
- /**
- * 暗号を開く
- */
- $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
- if (is_callable( ' mb_substr'))
- {
- $iv = mb_substr($encrypted_text, 0, Crypto_CIPHER_BLOCK_SIZE, 'latin1');
- }
- else
- {
- $iv = substr($encrypted_text, Crypto_CIPHER_BLOCK_SIZE);
- }
- /**
- * 復号化のために暗号化モジュールを初期化します
- */
- mcrypt_generic_init($td, $key, $iv);
- /**
- * 暗号化された文字列を復号化します
- */
- if (is_callable('mb_substr'))
- {
- $encrypted = mb_substr($encrypted_text, Crypto_CIPHER_BLOCK_SIZE, mb_strlen($encrypted_text, 'latin1'), 'latin1');
- }
- else
- {
- $encrypted = substr($encrypted_text, Crypto_CIPHER_BLOCK_SIZE);
- }
- $decrypted = generic($td, $encrypted);
- / **
- * 復号化ハンドルを終了し、モジュールを閉じます
- */
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- /**
- * 文字列を表示
- */
- return trim($decrypted);
- }
- define('Crypto_CIPHER_BLOCK_SIZE', 16);
- $a = aes128cbcEncrypt('pass', 'this is text');
- echobase64_encode($a) 。 "/r/n";
- $b = aes128cbcDecrypt('pass', $a);
- echo $b 。 "/r/n";
- $c = aes128cbcDecrypt('pass',base64_decode(base64_encode($a)));
- echo $c 。 "/r/n";
- ?>
复制發
|