搜尋
首頁後端開發PHP7php7+中如何使用openssl取代mcrypt進行AES加密解密

本篇文章為大家介紹一下php7 中使用openssl取代mcrypt進行AES加密解密的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

php7+中如何使用openssl取代mcrypt進行AES加密解密

mcrypt十年過去,現在php7 中已經開始淘汰。官方給掉提示:

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中對加密key長度沒有限制要求,傳入多少長度都會參加加密,但是在openssl_encrypt中。 key長度只能是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

雖然key長度32位,但是openssl_encrypt加密時候,key長度只使用了16長度,後面未參加簽名,而mcrypt_encrypt會整個key參與加密,這樣就會出現加密出來對結果不一致。造成困惑,key=g87y65ki6e8p93av8zjdrtfdrtgdwetd與key=g87y65ki6e8p93av結果都是一致對;

#推薦學習:php影片教學

以上是php7+中如何使用openssl取代mcrypt進行AES加密解密的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:csdn。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具