项目中使用了 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
liaohongxing 2018-08-17 23:33:29 +08:00
|