2017-01-19 20 views
10

Mcrypt関数はPHP 7.1.0以降では非推奨です。PHP7.1 mcryptの代替

マイ廃止予定の文字列のエンコード/デコード機能:

$key: secret key 
$str: string 


$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $str, MCRYPT_MODE_CBC, md5(md5($key)))); 

$decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($str), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 

はあなたには、いくつかの代替案を提案することはできますか?

+0

あなたがここに運の外に出ている:

は、公共要旨を参照してください。 Rijndael-256暗号を使用していますが、これは非常に珍しく、OpenSSLではサポートされていません。おそらくあなたが意味していたのはAES-256で、256ビットのキーを持つRijndael-128です。スイッチング暗号がオプションの場合は、Rijndael-128に切り替えます。この場合、OpenSSLを使用できます。 – NikiC

+0

sha-256 *(shaバージョン2)を使用しない理由* – TheCrazyProfessor

+0

[mcryptは重複している可能性があります。代替とは何ですか?](https://stackoverflow.com/questions/41272257/mcrypt-is-deprecated-what -is-the-alternative) – kenorb

答えて

13

代わりにopenssl_encryptを使用してください。よろしく!

+0

暗号化の例:http://micmap.org/php-by-example/en/function/openssl_encrypt、解読する例:http://micmap.org/php-by-example/ja/関数/ openssl_decrypt – mghhgm

1

defuseまたはRNCryptorを使用することを検討してください。これらは完全な解決策を提供し、維持され、正しいものです。

0

上記のように、open_sslはmcryptの良い選択肢です。 open_sslで唯一問題だったのは、大きな文字列には使用できないということです。

この問題を解決するスクリプト(静的クラス)を作成しました(大きな文字列はチャンクで分割され、バックグラウンドで個別に暗号化/復号化されます)。 https://gist.github.com/petermuller71/33616d55174d9725fc00a663d30194ba