Heim > Backend-Entwicklung > PHP7 > Hauptteil

So verwenden Sie openssl anstelle von mcrypt für die AES-Verschlüsselung und -Entschlüsselung in PHP7+

醉折花枝作酒筹
Freigeben: 2023-02-17 22:50:01
nach vorne
2736 Leute haben es durchsucht

In diesem Artikel erfahren Sie, wie Sie openssl anstelle von mcrypt für die AES-Verschlüsselung und -Entschlüsselung in PHP7+ verwenden. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

So verwenden Sie openssl anstelle von mcrypt für die AES-Verschlüsselung und -Entschlüsselung in PHP7+

Zehn Jahre sind vergangen und mcrypt wird in PHP7+ schrittweise abgeschafft. Der offizielle Tipp lautet:

mcrypt_get_block_size — 获得加密算法的分组大小

Warning
This function has been DEPRECATED as of PHP 7.1.0. Relying on this function is highly discouraged.
Nach dem Login kopieren

erfordert OpenSSL-Ersetzung in PHP7. Hier ist zu beachten:
Es gibt keine Begrenzung für die Länge des Verschlüsselungsschlüssels in mcrypt. Die Schlüssellänge kann nur 16 Längen betragen, das Signaturergebnis bleibt unverändert. Beim Testen alternativer Lösungen kann es leicht zu Fehlern kommen:

Weniger als bei php7 Versionscode

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
Nach dem Login kopieren

Unten Es ist PHP7 oder höher. Verwenden Sie die OpenSSL-Verschlüsselung:

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
Nach dem Login kopieren

Obwohl die Schlüssellänge 32 Bit beträgt, beträgt die Schlüssellänge bei der Verschlüsselung von OpenSSL_Encrypt nur 16 Bit und die Signatur wird später nicht einbezogen, während mcrypt_encrypt an der Verschlüsselung des gesamten Schlüssels beteiligt ist Die Verschlüsselungsergebnisse sind inkonsistent. Verursacht Verwirrung, die Ergebnisse von key=g87y65ki6e8p93av8zjdrtfdrtgdwetd und key=g87y65ki6e8p93av sind konsistent;

Empfohlenes Lernen: php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo verwenden Sie openssl anstelle von mcrypt für die AES-Verschlüsselung und -Entschlüsselung in PHP7+. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!