PHP openssl DES加解密

不说废话上代码

加密

  $str_padded = 'android'; //要加密的字符串
  $iv = "12345678"; 偏移值 cbc必填 "\x01\x02\x03\x04\x05\x06\x07\x08"; 如果java或这安卓  用的是byte那么需要改成这样
  $data['code'] = base64_encode(openssl_encrypt($this->pkcsPadding($str_padded,8),'DES-CBC',"33524ddt",OPENSSL_NO_PADDING,$iv)); //加密之后填充,然后base64

解密

  $decrypted = openssl_decrypt(base64_decode($data['code']), 'DES-CBC', '33524ddt', OPENSSL_NO_PADDING,$iv);
  dump($this->pkcs5_unpad($decrypted));//去掉填充

 

/**
* 填充
*
* @param $str
* @param $blocksize
* @return string
*/
private function pkcsPadding($str, $blocksize)
{
  $pad = $blocksize - (strlen($str) % $blocksize);
  return $str . str_repeat(chr($pad), $pad);
}

 

/*
* 对解密后的已字符填充的明文进行去掉填充字符
*/
function pkcs5_unpad($text) {
  $pad = ord($text{strlen($text) - 1});
  if ($pad > strlen($text)){
    return false;

  }
  return substr($text, 0, -1 * $pad);
}

 

 

注:注意和别的语言对接的时候base64加密有差异要注意特殊字符过滤

注:和java对接的时候 发现java的iv字段是byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 }类型 查了好久 最后发现PHp对应的主要 字符串就OK了如下

注:如果java或这安卓  用的是byte类型那么需要注意是否需要改成 "\x01\x02\x03\x04\x05\x06\x07\x08"16进制的写法; 

注:有的JAVA是重写base64,des加密后需要base64下,主要注意 加密后的字符串,按照规律,从左至右,每60个字符你添加一个空格

posted @ 2019-08-27 17:05  怪-人  阅读(1358)  评论(0编辑  收藏  举报