(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0)
mcrypt_encrypt — 指定したパラメータでプレーンテキストを暗号化する
この関数は PHP 7.1.0 で 非推奨となり、PHP 7.2.0 で削除 されました。この関数に頼らないことを強く推奨します。
$cipher
,$key
,$data
,$mode
,$iv
= ?データを暗号化して、それを返します。
cipher
MCRYPT_暗号名
定数のいずれか、
あるいはアルゴリズム名をあらわす文字列。
key
データを暗号化する際のキー。
指定した暗号化方式に対応していないサイズのキーを渡された場合は、
警告を発して false
を返します。
data
指定した cipher
および mode
で暗号化するデータ。
データの大きさが n * blocksize でない場合、データは、
'\0
'で埋められます。
返される暗号化されたテキストは、data
で指定したデータの大きさよりも大きくなる可能性があります。
mode
定数 MCRYPT_MODE_モード名
、あるいは文字列
"ecb", "cbc", "cfb", "ofb", "nofb" ,"stream" のいずれか。
iv
CBC, CFB, OFB モードおよび
STREAM モードのいくつかのアルゴリズムの初期化の際に使用されます。
指定した IV のサイズがそのモードでサポートされていない場合、
あるいは IV を必要とするモードで IV が指定されなかった場合は、
この関数は警告を発して false
を返します。
暗号化されたデータを文字列で返します。失敗した場合に false
を返します。
例1 mcrypt_encrypt() の例
<?php
# --- ENCRYPTION ---
# the key should be random binary, use scrypt, bcrypt or PBKDF2 to
# convert a string into a key
# key is specified using hexadecimal
$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
# show key size use either 16, 24 or 32 byte keys for AES-128, 192
# and 256 respectively
$key_size = strlen($key);
echo "Key size: " . $key_size . "\n";
$plaintext = "This string was AES-256 / CBC / ZeroBytePadding encrypted.";
# create a random IV to use with CBC encoding
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
# creates a cipher text compatible with AES (Rijndael block size = 128)
# to keep the text confidential
# only suitable for encoded input that never ends with value 00h
# (because of default zero padding)
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
$plaintext, MCRYPT_MODE_CBC, $iv);
# prepend the IV for it to be available for decryption
$ciphertext = $iv . $ciphertext;
# encode the resulting cipher text so it can be represented by a string
$ciphertext_base64 = base64_encode($ciphertext);
echo $ciphertext_base64 . "\n";
# === WARNING ===
# Resulting cipher text has no integrity or authenticity added
# and is not protected against padding oracle attacks.
# --- DECRYPTION ---
$ciphertext_dec = base64_decode($ciphertext_base64);
# retrieves the IV, iv_size should be created using mcrypt_get_iv_size()
$iv_dec = substr($ciphertext_dec, 0, $iv_size);
# retrieves the cipher text (everything except the $iv_size in the front)
$ciphertext_dec = substr($ciphertext_dec, $iv_size);
# may remove 00h valued characters from end of plain text
$plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
$ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
echo $plaintext_dec . "\n";
?>
上の例の出力は以下となります。
Key size: 32 ENJW8mS2KaJoNB5E5CoSAAu0xARgsR1bdzFWpEn+poYw45q+73az5kYi4j+0haevext1dGrcW8Qi59txfCBV8BBj3bzRP3dFCp3CPQSJ8eU= This string was AES-256 / CBC / ZeroBytePadding encrypted.