SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【php】mcrypt関数廃止の対応

問題

php7で、mcrypt関数が使えなくなってるそうですね。

代替手段は?

答え

以下は同じ結果が得られた。

opensslに変更できそう。

mcrypt_cbc()

$password = 'test345678';
$iv = 'password';                                                                                                                                            $key = substr(md5('password'), 0, 24); 

$x = bin2hex(mcrypt_cbc(MCRYPT_3DES, $key, $password, MCRYPT_ENCRYPT, $iv));
// string(32) "4356c3964077d869d1ecbcb0eecf4b8d"

mcrypt_encrypt()

$password = 'test345678';
$iv = 'password';                                                                                                                                            $key = substr(md5('password'), 0, 24); 

$x = bin2hex(mcrypt_encrypt(MCRYPT_3DES, $key, $password, MCRYPT_MODE_CBC, $iv));
// string(32) "4356c3964077d869d1ecbcb0eecf4b8d"

openssl_encrypt()

$password = 'test345678';
$iv = 'password';                                                                                                                                            $key = substr(md5('password'), 0, 24); 

$password_padded = $password;
if ($m = strlen($password_padded) % 8) {
    $password_padded .= str_repeat("\0", 8 - $m);
}

$x = bin2hex(openssl_encrypt($password_padded, 'des-ede3-cbc', $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $iv));
// string(32) "4356c3964077d869d1ecbcb0eecf4b8d"

openssl関数を使うときは、ブロックサイズに合うように?8文字単位に埋める作業だけ必要。

※ php5.6 は上記の結果となったが、php5.3はopenssl関数の仕様が若干違うようで、少し異なる結果となった。

関連するメモ

コメント