Function mcrypt_get_block_size() is deprecated

Function mcrypt_get_block_size() is deprecated

解决方案a:

php7.1以上. mcrypt_generic_open is deprecated 这个错误,

就是因为mcrypt扩展,在php7.1以上被废弃,服务器不设置报错等级的话,

这个错误会被框架拦截,然后报出微信demo里的40007错误,

具体解决方案,所有 mcrypt扩展的代码,全部加上 错误抑制符 ,例如

//使用BASE64对需要解密的字符串进行解码

代码

            $ciphertext_dec = base64_decode($encrypted);

            $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');

            $iv = substr($this->key, 0, 16);

            mcrypt_generic_init($module, $this->key, $iv);

            //解密

            $decrypted = mdecrypt_generic($module, $ciphertext_dec);

            mcrypt_generic_deinit($module);

            mcrypt_module_close($module);

修改的代码

            $ciphertext_dec = base64_decode($encrypted);

            @$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');

            $iv = substr($this->key, 0, 16);

            @mcrypt_generic_init($module, $this->key, $iv);

            //解密

            @$decrypted = mdecrypt_generic($module, $ciphertext_dec);

            @mcrypt_generic_deinit($module);

            @mcrypt_module_close($module);

然后我的问题就解决了。

我的问题主要出在微信的加解密函数上,遇到的坑有几个

1.文档给的class默认有的是小写,

2.一个文件有多个class得拆开

3.构造函数获取的变量名称不对得修改…

这些用断点调试都可以进行解决

解决方案b:

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结果都是一致对;

原文:https://blog.csdn.net/qq_38686693/article/details/81388329

原文:https://blog.csdn.net/ranlv91/article/details/81916393

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容

  • 加密技术的重点是加密算法,加密算法主要分为三类: 对称加密 非对称加密 不可逆加密 对称加密算法 加密过程: 将明...
    飞越_7666阅读 1,095评论 0 0
  • PHP,Android,IOS通信之 AES128加解密案例程序android上调用代码: mcrypt = ne...
    YO_GE阅读 869评论 0 0
  • <?php namespace app\common\lib; /** * aes 加密 解密类库 * @by s...
    进击的PHPer阅读 594评论 0 0
  • 分组密码每次只能处理加密固定长度的分组,但是我们加密的明文可能会超过分组密码处理的长度。这时便需要对所有分组进行迭...
    查无此人asdasd阅读 1,162评论 0 0
  • 姓名 汪海。公司 上海日朗门窗有限公司 【日精进打卡第64天】 【知~学习】 《六项精进》背诵0遍 《大学》背诵0...
    汪海_51e2阅读 131评论 0 0