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

2018-08-17 16:24:08 +08:00
 dainifeng

项目中使用了 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;
}
2153 次点击
所在节点    问与答
1 条回复
liaohongxing
2018-08-17 23:33:29 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/480778

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX