V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dainifeng
V2EX  ›  问与答

请问在 php7.1 里, mcrypt_encrypt()这个算法 MCRYPT_RIJNDAEL_256 ,如何用 OpenSSL 替换呢?

  •  
  •   dainifeng · 2018-08-17 16:24:08 +08:00 · 2228 次点击
    这是一个创建于 2291 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目中使用了 mcrypt 的 MCRYPT_RIJNDAEL_256 这个算法,找了好久也没找到好的解决方案! 用 OpenSSL 的 AES-256-CBC 或者 ARS-128-CBC 里面的偏移量只能使用 16 位,而不能使用 32 位,瞬间崩溃陷入死循环了。 下面是加密解密算法,敢问改如何用 openssl 进行处理呢?希望万能网友能给予支持!

    /**
     * 加密数据
     *
     * @param null $data
     * @return string
     */
    
    function safeEncrypt($data = null,$key=null) {
        $ivSize     = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); // 向量大小
        $iv         = mcrypt_create_iv($ivSize, MCRYPT_RAND);// 向量值
        $cryptText  = rtrim(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv), "\0"); // 加密
    
        return base64_encode($iv . '$$' . $cryptText);
    }
    
    /**
     * 解密数据
     *
     * @param null $data
     * @return string
     */
    function safeDecrypt($data = null,$key=null) {
    
        $data   = base64_decode($data);
        $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
        $iv     = substr($data, 0, $ivSize);
        $text   = substr($data, $ivSize + 2);
        $cryptText = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv), "\0");
    
        return $cryptText;
    }
    
    1 条回复    2018-08-17 23:33:29 +08:00
    liaohongxing
        1
    liaohongxing  
       2018-08-17 23:33:29 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   873 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 20:35 · PVG 04:35 · LAX 12:35 · JFK 15:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.