【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関数の仕様が若干違うようで、少し異なる結果となった。
コメント