PHP7 DES加密兼容回退方法

franzhong 2019-03-30 10:39:19
class MyDes{
private $key = "";
private $iv = "";

//构造,传递二个已经进行base64_encode的KEY与IV
function __construct ($key, $iv)
{
if (empty($key) || empty($iv)) { exit();}
$this->key = $key;
$this->iv = $iv;
}

public function encrypt ($value){//加密
$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
$iv = base64_decode($this->iv);
$value = $this->PaddingPKCS7($value);
$key = base64_decode($this->key);
mcrypt_generic_init($td, $key, $iv);
$ret = base64_encode(mcrypt_generic($td, $value));
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $ret;
}

public function decrypt ($value){//解密
//var_dump(openssl_get_cipher_methods());//查看支持的方法
//return openssl_decrypt ($value, 'id-smime-alg-CMS3DESwrap', $this->key,'',$this->iv);//####
$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
$iv = base64_decode($this->iv);
$key = base64_decode($this->key);
mcrypt_generic_init($td, $key, $iv);
$ret = trim(mdecrypt_generic($td, base64_decode($value)));
$ret = $this->UnPaddingPKCS7($ret);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $ret;
}

private function PaddingPKCS7 ($data){
$block_size = mcrypt_get_block_size('tripledes', 'cbc');
$padding_char = $block_size - (strlen($data) % $block_size);
$data .= str_repeat(chr($padding_char), $padding_char);
return $data;
}

private function UnPaddingPKCS7($text){
$pad = ord($text{strlen($text) - 1});
if ($pad > strlen($text)) {
return false;
}
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
return false;
}
return substr($text, 0, - 1 * $pad);
}
}


从PHP7开始,mcrypt_module_open 被遗弃了,继续解密使用MCRYPT_3DES类型加密的数据?
...全文
62 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,250

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧