代码备份录——PHP7.2 加解密之—— DES-CBC
加解密
public static function encrypt($str,$key){
$str = urlencode($str);
$str = base64_encode($str);
$str = self::pkcsPadding($str, 8);
// 此处根据自己不同偏移量进行修改
$v = $key;//pack('H*', "1234567890abcdef");
$key = str_pad($key, 8, '0'); // 3DES加密将8改为24
$sign = openssl_encrypt($str, 'DES-CBC', $key,OPENSSL_RAW_DATA | OPENSSL_NO_PADDING,$v);
$sign = strtoupper(bin2hex($sign));
return $sign;
}
//des解密(cbc模式)
public static function decrypt($encrypted,$key){
$encrypted = hex2bin($encrypted);
// 此处根据自己不同偏移量进行修改
$v = $key;//pack('H*', "1234567890abcdef");
$key = str_pad($key, 8, '0'); // 3DES加密将8改为24
$sign = @openssl_decrypt($encrypted, 'DES-CBC', $key,OPENSSL_RAW_DATA | OPENSSL_NO_PADDING,$v);
$sign = self::unPkcsPadding($sign);
$sign = rtrim($sign);
$sign = base64_decode($sign);
$sign = urldecode($sign);
return $sign;
}
相关代码
/**
* 填充
* @param $str
* @param $blocksize
* @return string
*/
private static function pkcsPadding($str, $blocksize){
$pad = $blocksize - (strlen($str) % $blocksize);
return $str . str_repeat(chr($pad), $pad);
}
/**
* 去填充
* @param $str
* @return string
*/
private static function unPkcsPadding($str){
$pad = ord($str{strlen($str) - 1});
if ($pad > strlen($str)) {
return false;
}
if (strspn($str, chr($pad), strlen($str) - $pad) != $pad){
return false;
}
return substr($str, 0, -1 * $pad);
}