php7+ で AES 暗号化と復号化に mcrypt の代わりに openssl を使用する方法
この記事では、php7 で AES 暗号化と復号化に mcrypt の代わりに openssl を使用する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
10 年が経過し、php7 では mcrypt が段階的に廃止され始めました。公式のヒント:
mcrypt_get_block_size — 获得加密算法的分组大小 Warning This function has been DEPRECATED as of PHP 7.1.0. Relying on this function is highly discouraged.
では、php7 で openssl の置き換えが必要です。ここで注意する必要があるのは:
mcrypt の暗号化キーの長さに制限はありません。渡された長さはすべて含まれます暗号化ではなく、openssl_encrypt です。キーの長さは 16 までしか指定できません。16 を超える長さの場合、署名結果は変更されません。これは落とし穴です。代替案をテストするときに間違いを犯しやすいです。詳細については、コードを直接比較してください:
はphp7 のバージョンコード未満
class AES { public static function encrypt($input,$key) { $blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); $paddedData = static::pkcs5_pad($input, $blockSize); $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($ivSize, MCRYPT_RAND); $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $paddedData, MCRYPT_MODE_ECB, $iv); return bin2hex($encrypted); } private static function pkcs5_pad ($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } public static function decrypt($sStr,$key) { $decrypted= mcrypt_decrypt( MCRYPT_RIJNDAEL_128, $key, hex2bin($sStr), MCRYPT_MODE_ECB ); $dec_s = strlen($decrypted); $padding = ord($decrypted[$dec_s-1]); $decrypted = substr($decrypted, 0, -$padding); return $decrypted; } /** *url 安全的base64编码 sunlonglong */ function base64url_encode($data) { return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); } /** *url 安全的base64解码 sunlonglong */ function base64url_decode($data) { return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)); } } $key = 'g87y65ki6e8p93av8zjdrtfdrtgdwetd'; $encrypt = AES::encrypt('123abc',$key); $decrypt = AES::decrypt($encrypt,$key); var_dump($encrypt,$decrypt); 加密结果: da07f6363eb0024b4bdd264e5fd4a2f5
以下は php7 以降のものです。 openssl 暗号化を使用します:
class AES { /** * * @param string $string 需要加密的字符串 * @param string $key 密钥 * @return string */ public static function encrypt($string, $key) { // openssl_encrypt 加密不同Mcrypt,对秘钥长度要求,超出16加密结果不变 $data = openssl_encrypt($string, 'AES-128-ECB', $key, OPENSSL_RAW_DATA); $data = strtolower(bin2hex($data)); return $data; } /** * @param string $string 需要解密的字符串 * @param string $key 密钥 * @return string */ public static function decrypt($string, $key) { $decrypted = openssl_decrypt(hex2bin($string), 'AES-128-ECB', $key, OPENSSL_RAW_DATA); return $decrypted; } } $encrypt = AES::encrypt('123abc', 'g87y65ki6e8p93av8zjdrtfdrtgdwetd'); $decrypt = AES::decrypt($encrypt, 'g87y65ki6e8p93av8zjdrtfdrtgdwetd'); var_dump($encrypt,$decrypt);die; 加密结果: 8c927c42f93a83c5de763aa18e4e6c7d
キーの長さは 32 ビットですが、openssl_encrypt が暗号化される場合、キーの長さは 16 ビットのみで、後で署名は含まれません。一方、mcrypt_encrypt はキー全体の暗号化に参加します。 , そのため、暗号化が行われますが、結果は一貫性がありません。混乱を引き起こす可能性があるため、key=g87y65ki6e8p93av8zjdrtfdrtgdwetd と key=g87y65ki6e8p93av の結果は一貫しています。
推奨学習: php ビデオ チュートリアル
以上がphp7+ で AES 暗号化と復号化に mcrypt の代わりに openssl を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











この記事では、PHP 7の新しいオペレーターであるNull Coalescing(??)、Spaceship(< =>)、およびnull coulescing assignment(?? =)演算子について詳しく説明しています。 これらは、ヌルのチェックと比較を簡素化することにより、コードの読みやすさとパフォーマンスを向上させます、indirectl

この記事では、パフォーマンスのためのPHP7コードの最適化を検討します。 非効率的なデータベースクエリ、I/O操作、メモリリークなどの一般的なボトルネックに対処します。 ソリューションには、効率的なコーディングプラクティス、データベース、キャッシュ戦略、Asynchが含まれます

PHP 7のマイナーバージョンの違いにより、微妙なメモリ消費の変動が得られます。 一般に、新しいバージョンはZend EngineとGarbage Collectionの最適化を介してパフォーマンスとメモリ効率を向上させますが、その影響はアプリケーションに依存します。 意味

この記事では、session_start()、$ _session、session_destroy()、セキュアクッキー処理などのコア機能をカバーする効果的なPHP 7セッション管理について詳しく説明します。 HTTPS、セッションID再生、sなどのセキュリティベストプラクティスを強調しています

PHP 7は、多数のバグに対処し、パフォーマンスを向上させ、セキュリティを強化することにより、以前のバージョンで大幅に改善されました。 主な改善には、書き換えられたZend Engine 3、最適化されたメモリ管理、洗練されたエラー処理が含まれます。遺伝子中

この記事では、PHP7でのセッションの処理を検討し、Zendエンジンの強化に起因するパフォーマンスの改善を強調します。 セキュリティとスケーラビリティのためのアップグレードと詳細最適化戦略による潜在的な互換性の問題について説明します

この記事では、New Relicを使用してPHP 7アプリケーションのパフォーマンスを監視する方法について説明します。 New Relicのセットアップ、APDEXスコアや応答時間などのキーパフォーマンスインジケーター(KPI)、トランザクショントレースを介したボトルネックの識別、エラートラックの詳細

この記事では、PHP 5.6をPHP 7にアップグレードし、バックアップ、サーバーの互換性のチェック、アップグレードメソッドの選択などの重要な手順(パッケージマネージャー、コンパイル、コントロールパネル、またはWebサーバーの構成)を強調しています。 ポテンティアに対処します
