Mcrypt 関数
目次
- mcrypt_create_iv — Creates an initialization vector (IV) from a random source
- mcrypt_decrypt — Decrypts crypttext with given parameters
- mcrypt_enc_get_algorithms_name — Returns the name of the opened algorithm
- mcrypt_enc_get_block_size — Returns the blocksize of the opened algorithm
- mcrypt_enc_get_iv_size — オープンされたアルゴリズムの IV の大きさを返す
- mcrypt_enc_get_key_size — オープンされたモードでサポートされる最大キー長を返す
- mcrypt_enc_get_modes_name — オープンされたモードの名前を返す
- mcrypt_enc_get_supported_key_sizes — オープンされたアルゴリズムでサポートされるキー長を配列にして返す
- mcrypt_enc_is_block_algorithm — オープンされたモードの暗号がブロックアルゴリズムであるかどうかを調べる
- mcrypt_enc_is_block_algorithm_mode — オープンされたモードの暗号がブロックモードで動作するかどうかを調べる
- mcrypt_enc_is_block_mode — オープンされたモードがブロック出力を行うかどうかを調べる
- mcrypt_enc_self_test — オープンしたモジュールのセルフテストを実行する
- mcrypt_encrypt — 指定したパラメータでプレーンテキストを暗号化する
- mcrypt_generic — データを暗号化する
- mcrypt_generic_deinit — 暗号化モジュールを終了する
- mcrypt_generic_init — 暗号化に必要な全てのバッファを初期化する
- mcrypt_get_block_size — 指定した暗号のブロックサイズを得る
- mcrypt_get_cipher_name — 指定した暗号の名前を得る
- mcrypt_get_iv_size — 指定した暗号/モードの組み合わせに属する IV の大きさを返す
- mcrypt_get_key_size — 指定した暗号のキーの長さを得る
- mcrypt_list_algorithms — サポートされる全ての暗号を配列として取得する
- mcrypt_list_modes — サポートされる全てのモードの配列を取得する
- mcrypt_module_close — mcrypt モジュールを閉じる
- mcrypt_module_get_algo_block_size — 指定したアルゴリズムのブロック長を返す
- mcrypt_module_get_algo_key_size — オープンされたモードでサポートされる最大キー長を返す
- mcrypt_module_get_supported_key_sizes — オープンされたアルゴリズムでサポートされるキーのサイズを配列として返す
- mcrypt_module_is_block_algorithm — 指定したアルゴリズムがブロックアルゴリズムであるかを調べる
- mcrypt_module_is_block_algorithm_mode — 指定したモジュールがブロックアルゴリズムであるかどうかを返す
- mcrypt_module_is_block_mode — 指定したモードがブロック出力を行うかどうかを返す
- mcrypt_module_open — 使用するアルゴリズムおよびモードのモジュールをオープンする
- mcrypt_module_self_test — 指定したモジュールのセルフテストを実行する
- mdecrypt_generic — データを復号する
+add a note
User Contributed Notes 24 notes
rolf at winmutt dot com ¶
18 years ago
mysql AES_ENCRYPT() compatibly function for PHP :
<?php
function mysql_aes_encrypt($val,$ky) {
$mode=MCRYPT_MODE_ECB;
$enc=MCRYPT_RIJNDAEL_128;
$val=str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16)));
return mcrypt_encrypt($enc, $ky, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM));
}
?>
Please note that if the strlen($ky)>16 then this function will not be compatible.
groundzero at zuavra dot net ¶
20 years ago
If you've ever compiled PHP from source (any version) you may be familiar with the [in]famous MCRYPT_BLOWFISH_128 compilation error that appears when you attempt to compile --with-mcrypt. It occurs often on Debian but not only there. The problem: during compilation, the PHP configure script always assumes that libmcrypt has been built in conjunction with libltdl. Whenever that is not the case, PHP compilation will fail later saying certain headers (such as the above blowfish example) are missing from mcrypt.h (which is misleading, they're not supposed to be there nor looked after if libltdl was properly involved). Solution: make sure your libmcrypt was linked against libltdl before you even start configuring PHP. You can check by running 'ldd lybmcrypt.so' and verifying that libltdl appears in the output. libltdl can be found in libltld[3][-dev] on Debian or in libtool-libs on Red Hat.
manyagain ¶
15 years ago
if you don't have mcrypt installed, try phpseclib - http://phpseclib.sourceforge.net
includes pure-php implementations of des, 3des, rc4, aes, and rijndael. uses mcrypt if it's available and a pure-php implementation otherwise. it also has the distinction of having the fastest existent pure-php aes implementation as per section 3.5.5. "Speed Comparisons" of the documentation.
duerra_NOT_THIS_ at pushitlive dot net ¶
18 years ago
For those of you that need to use PKCS#5 padding, the mcrypt API's for PHP do not support it. However, you can DIY using the following:
<?php
function encrypt_something($input)
{
$size = mcrypt_get_block_size('des', 'ecb');
$input = pkcs5_pad($input, $size);
$key = 'YOUR SECRET KEY HERE';
$td = mcrypt_module_open('des', '', 'ecb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
function pkcs5_pad ($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function pkcs5_unpad($text)
{
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -1 * $pad);
}
?>
triptripon at gmail dot com ¶
18 years ago
Regarding storing the result on a postgres DB that uses Unicode (follow up to a post below).
You don't need to change the DB's encoding to ASCII.
Simply use BASE64 to encode the result, it's perfectly safe.
use base64_decode before you decrypt.
-- Tomer Levinboim
herowekker at hotmail dot com ¶
21 years ago
mcrypt_ecb with base64_decode gave some problems, i found out that it had to be chopped to work:
<?php
chop(mcrypt_ecb(MCRYPT_BLOWFISH,$key,base64_decode($input),MCRYPT_DECRYPT));
?>
Kevin ¶
16 years ago
Solved Problem:
when compiling php --with-mcrypt, phpinfo() says, that mcrypt ist enabled, but
"Supported ciphers none" and
"Supported modes none"
In order to get mcrypt to work in php, you have to configure and compile the libmcrypt source package with the following options:
./configure --disable-posix-threads --enable-dynamic-loading
simms ¶
21 years ago
DEBIAN users: avoid mcrypt installation headaches.
to add mcrypt support to an existing php installation, get root and run
apt-get install php4-mcrypt
restart your webserver, and voila.
pawelNOSPAM at rsc dot pl ¶
23 years ago
If you compiled mcrypt and php without problem, but phpinfo() shows there are no supported ciphers and modes, try to change mode to 755 on libdirs (/usr/local/libmcrypt, /usr/local/libcrypt).
patrickdk at patrickdk dot com ¶
14 years ago
This works completely with mysql aes, even long keys.
<?php
function mysql_aes_decrypt($val,$ky)
{
$key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
for($a=0;$a<strlen($ky);$a++)
$key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a]));
$mode = MCRYPT_MODE_ECB;
$enc = MCRYPT_RIJNDAEL_128;
$dec = @mcrypt_decrypt($enc, $key, $val, $mode, @mcrypt_create_iv( @mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM ) );
return rtrim($dec,(( ord(substr($dec,strlen($dec)-1,1))>=0 and ord(substr($dec, strlen($dec)-1,1))<=16)? chr(ord( substr($dec,strlen($dec)-1,1))):null));
}
function mysql_aes_encrypt($val,$ky)
{
$key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
for($a=0;$a<strlen($ky);$a++)
$key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a]));
$mode=MCRYPT_MODE_ECB;
$enc=MCRYPT_RIJNDAEL_128;
$val=str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16)));
return mcrypt_encrypt($enc, $key, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM));
}
?>