この記事では、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ヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
