検索
ホームページバックエンド開発PHP7php7+ で AES 暗号化と復号化に mcrypt の代わりに openssl を使用する方法

この記事では、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 サイトの他の関連記事を参照してください。

声明
この記事はcsdnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター